2010-10-09 6 views
4

Afin de faire une copie en profondeur de myArr,copie profonde du vecteur <Point> myArr

vector <Point> myArr; 

Point est une classe avec 2 ints en tant que membres,

Est-ce que je dois faire quelque chose de spécial? ou est ok avec

vector <Point> otherArr = myArr; 

Je dois supprimer certains points dans otherArr mais en même temps, je besoin de tous les points myArr pour un usage ultérieur.

merci à l'avance

+5

Si vous n'en avez pas, envisagez d'obtenir [un bon livre C++ d'introduction] (http://stackoverflow.com/questions/388242/the-definitive-c++-book-guide-and-list). Il est essentiel d'avoir une bonne compréhension du modèle de mémoire et du modèle objet lors de la programmation en C++. –

+2

Je reconnais que la gestion de la mémoire est la chose que je dois travailler le plus en C++, mais chaque fois que je commence à lire un livre, ils parlent de la programmation et des règles GRAMMAR et d'autres langages de programmation ... Si vous pouviez suggérer un livre spécifique pour la gestion de la mémoire, cela serait apprécié;) – nacho4d

Répondre

7

Voir Shallow vs Deep Copies et Effective C++

Point n'a pas besoin de copie en profondeur. En règle de pouce, "copie profonde" est nécessaire quand une classe a des membres de pointeur. La classe Point a seulement deux membres int, donc il ne nécessite aucun effort particulier pour "copie profonde", la normale ou "copie superficielle" ferait parfaitement bien. En fait, il n'est pas nécessaire pour écrire un constructeur de copie pour Point, la valeur par défaut ou synthétisée fournie par le compilateur ferait très bien.

En ce qui concerne votre deuxième question, après la ligne

vector<Point> otherArr = myArr; 

est exécuté, otherArr et myArr sont deux vecteurs indépendants . Les opérations (par exemple supprimer certains éléments) effectuées sur l'un d'entre eux n'a aucun effet sur l'autre.

+0

Merci pour votre réponse aimable et pour les liens;) Je les ai trouvés très utiles. – nacho4d

+0

@ nacho4d: Content d'être utile, je vous en prie. – Arun

1

L'affectation doit être fine. Il s'assure que toutes les données sont copiées correctement. Assurez-vous simplement que Point est copiable.

+0

Comment faire pour que Point soit copiable? que se passerait-il si ce n'est pas? merci;) – nacho4d

+3

Si 'Point' est non-jetable, vous ne pouvez pas avoir un' vecteur '(en C++ 03, au moins). –

1

Ce que vous avez est bon. Le vecteur a un opérateur d'affectation surchargé et un constructeur de copie qui effectuent une copie en profondeur.

+5

L'opérateur d'affectation ne sera pas appelé; c'est une initialisation, pas une affectation. –

+1

@ James McNellis: Merci :) – JoshD

Questions connexes