J'ai du mal à obtenir la bonne taille d'un vecteur avec des éléments struct. La classe d'élément est défini comme celui-ci (je n'omets aucun détail, même si je pense que le seul fait pertinent est qu'il est une classe contenant un entier et deux doubles):taille de std :: vector avec struct elements
class Interval
{
public:
Interval(int _i = 0, scalar _l = 0, scalar _r = 0) :
index(_i),
l(_l),
r(_r)
{ }
inline double left(void) const { return l; }
inline double right(void) const { return r; }
inline bool operator < (const Interval & i2) const { return left() < i2.left(); }
public:
int index;
double l;
double r;
};
Puis, en fonction je ce code:
std::vector<Interval> arr(10);
int s1 = arr.size();
int s2 = arr.end() - arr.begin();
la valeur de s1 je reçois est de 15, alors que s2 est la valeur correcte 10. Que se passe-t-il? Est-ce que size() n'est pas supposé retourner exactement le nombre d'éléments? N'est-ce pas censé être le même que arr.end() - arr.begin()?
Toute réponse et commentaire est apprécié.
Il n'y a aucune manière connue qu'une exécution fonctionnante de vecteur le fera. Veuillez montrer tout le code que vous utilisez pour le vérifier. –
Oui, size() est supposé égal à end() - begin(); nous avons besoin d'un meilleur test pour comprendre ce qui se passe. –
Ne sois pas vague, sois un as; apprendre à écrire un test-case approprié! http://sscce.org/ http://www.xs4all.nl/~weegen/eelis/iso-c++/testcase.xhtml http://tinyurl.com/so-hints –