web-dev-qa-db-fra.com

sizeof () un vecteur

J'ai une structure de données vector<set<char> > (base de données de transactions) et je veux en connaître la taille. Quand j'utilise sizeof () avec chaque set<char>, la taille est de 24 malgré que le jeu contienne 3, 4 ou 5 caractères. Plus tard, lorsque j'utilise sizeof () avec le vector<set<char> >, la taille est de 12 ... Je suppose que ce n'est pas le moyen de connaître la taille d'une structure de données. Toute aide? Merci.

14
peterJk

Vous voulez vector::size() et set::size().

En supposant que v est votre vecteur, procédez comme suit:

size_t size = 0;
for (vector<set<char> >::const_iterator cit = v.begin(); cit != v.end(); ++cit) {
    size += cit->size();
}

sizeof() vous donne la taille en mémoire de l'objet/du type auquel il est appliqué, en multiples de sizeof(char) (généralement un octet). Si vous souhaitez connaître la taille en mémoire du conteneur et de ses éléments, vous pouvez procéder comme suit:

sizeof(v) + sizeof(T) * v.capacity(); // where T is the element type

22
user123456

sizeof renvoie la taille de l'objet lui-même. si elle contient un pointeur sur un tableau par exemple, elle ne comptera pas la taille du tableau, elle ne comptera que la taille du pointeur (4 sur 32 bits) à utiliser avec le vecteur .size

11
Andrey

Vector est mis en œuvre à l'aide de pointeurs internes vers le stockage actuel. Ainsi, sizeof () retournera toujours le même résultat, ce qui n'inclut pas le stockage de données lui-même. Essayez d'utiliser la méthode vector::size() à la place. Cela retournera le nombre d'éléments dans le vecteur.

6
Stephen Doyle

sizeof() est calculé à la compilation, il n’ya donc aucun moyen de vous dire le nombre d’éléments qu’il contient.

Utilisez la méthode size() de l'objet vectoriel.

2
Nicolás

vector in STL est un modèle de classe, lorsque vous indiquez un paramètre de modèle dans le vecteur suivant <SomeType>, le code généré par le compilateur C++ pour une classe de type SomeType . Ainsi, lorsque vous remplissez le vecteur à l'aide de Push_back, vous insérez en fait un autre objet de SomeType. Ainsi, lorsque vous demandez .size() au compilateur, il vous donne le nombre d'objets SomeType que vous avez insérés.
J'espère que cela pourra aider!

1
Rajendra Uppal

Utilisez la fonction membre vector::size() pour connaître le nombre d'éléments dans le vecteur. Astuce - ils sont alloués sur le magasin gratuit.

0
Nikolai Fetissov