2010-04-15 8 views
0

Qui peut me donner un lien pour l'opérateur = du vecteur dans MSDN? Pourquoi est-ce que je peux seulement trouver l'opérateur []?Qui peut me donner un lien pour l'opérateur = du vecteur dans MSDN?

Pourquoi?

Si opérateur = est juste quelque chose par défaut, comme copier tout dans A à B, comment ce code suivant fonctionne?

vector<double> v(100,1); 
v = vector<double>(200,2); // if operator= is just a trivail version, how to make sure the old v get cleared? 
+1

Pourquoi ne faites-vous pas simplement une recherche? Il est répertorié sous "opérateurs vectoriels" avec 'operator []': http://msdn.microsoft.com/en-us/library/dd673471(v=VS.100).aspx –

+0

Vous venez de poser cette question. Pourquoi ne modifiez-vous pas votre ancienne question et ne la marquez pas? Aussi, voir le commentaire que j'ai laissé sur votre autre question. Vous vous inquiétez trop, laissez vecteur faire son travail; ça va tout effacer, je le promets. Je vote pour fermer en double. – GManNickG

+0

Allez! La raison pour laquelle je pose cette question est parce qu'il n'y a aucun opérateur = pour le vecteur dans MSDN, qui m'a confondu. – 8888q8888

Répondre

3

std::vector fait partie de la STL, de sorte que toute description de std::vector fera. L'implémentation sous-jacente peut différer légèrement, mais toutes les versions conformes de STL doivent fournir la même interface et les mêmes garanties pour std::vector. Je ne trouve pas dans rapidement sur MSDN, mais voici deux de ces descriptions de operator=:

  1. http://www.cplusplus.com/reference/stl/vector/operator=/
  2. http://www.sgi.com/tech/stl/Vector.html

Maintenant, la deuxième partie de votre question me déconcerte. Que voulez-vous operator= à faire sur un vecteur si ce n'est pas "copier tout de A dans B"? Dans votre exemple, votre question était «comment vous assurer que l'ancien v est supprimé?». Je peux interpréter cela de deux façons: Vous demandez peut-être «comment puis-je savoir que cette affectation v = vector<double>(200,2) remplacera le contenu de v et ne s'y ajoutera pas?». La réponse est que vous le savez parce que c'est la définition de la façon dont fonctionne operator= pour les conteneurs STL. Toute implémentation conforme aux normes est garantie de fonctionner de cette manière.

Vous pourriez également demander "ce qui arrive au contenu de v quand je les écrase en utilisant l'affectation v = vector<double>(200,2)?" La réponse est qu'ils sont désalloués, et s'ils sont des objets, leurs destructeurs sont appelés. Notez la distinction importante que si le vecteur contient pointeurs à objets, les pointeurs eux-mêmes sont désalloués, mais pas ce qu'ils pointent vers. Si je n'ai pas répondu à votre question, veuillez essayer de la clarifier.

+0

Ma question est plus comme votre deuxième interprète. Vous avez dit "La réponse est qu'ils sont désalloués", mais COMMENT si vous avez juste un opérateur = COPIER tous les membres de B.member à A.member sans désaffecter explicitement le vieux membre. – 8888q8888

+0

@ 8888: Qui a dit qu'il ne fait que copier tous les membres? – GManNickG

+0

Donc, ce que je veux dire est qu'il devrait y avoir un opérateur spécial = pour vecteur faire la chose suivante: void operator = (vecteur & B) { éléments d'effacement dans A redimensionnez A éléments de copie de B à A } – 8888q8888