2010-04-15 3 views
0

Je le code suivant:Est-ce que le vieux vecteur est effacé? Si oui, comment et quand?

void foo() 
{ 
    vector<double> v(100,1);  // line 1 
    // some code 
    v = vector<double>(200,2);  // line 2 
    // some code 
} 

ce qui est arrivé au vecteur de la taille 100 après la deuxième ligne? Est-il effacé par lui-même? Si la réponse est oui, comment et quand elle est effacée? Par ailleurs, y a-t-il d'autres façons "faciles et propres" de changer le vecteur comme dans la ligne 2? Je ne veux pas des choses comme

v.resize(200); 
for (int i=0; i<200; i++) v[i] = 2; 

Une autre question. Que faire si le vecteur est un membre d'une classe:

class A{ 
public: 
    vector<double> data; 

    A(int size, double value) 
    { 
     data = vector<double>(size,value); 
    } 
}; 

A object(10,1); 
// some code 
object = A(20,2);  // ** What happened to the old object.data? ** 
// some code 
+0

Où puis-je trouver la description pour l'opérateur = de vecteur dans MSDN? – 8888q8888

+0

MSDN ne définit pas la langue. Ni ce site [http://www.cplusplus.com/reference/], mais il devrait être un peu plus informatif. [Pour opérateur vectoriel =] (http://www.cplusplus.com/reference/stl/vector/operator=/). – GManNickG

+0

Merci! Je l'ai! Désolé pour les questions en double. – 8888q8888

Répondre

4

Dans l'affectation, d'abord un objet temporaire de vecteur est créé, qui contient 200 fois l'élément 2. Cet objet temporaire est alors affecté à v: Le vecteur v supprime tous les éléments qu'il contient actuellement et copie le contenu de l'objet vectoriel temporaire. À la fin de l'instruction, l'objet vectoriel temporaire est à nouveau détruit.

Pour ce faire, de façon plus concise sans créer un objet temporaire, vous pouvez utiliser la méthode assign():

v.assign(200, 2); 
+0

C'est la bonne réponse que je cherche! Merci. – 8888q8888

Questions connexes