insérer un élément dans une position spécifique d’un vecteur

Je veux insérer un élément dans une position spécifique d’un vecteur, puis-je utiliser une affectation:

// vec1 and 2 have the same length & filled in somehow vec1; vec2; vec1[i] = vec2[i] // insert vec2[i] at position i of vec1 

ou je dois utiliser insert ():

 vector::iterator iterator = vec1.begin(); vec1.insert(iterator+(i+1), vec2[i]); 

 vec1[i] = vec2[i] 

définira la valeur de vec1[i] sur la valeur de vec2[i] . Rien n’est inséré. Votre deuxième approche est presque correcte. Au lieu de +i+1 vous avez juste besoin de +i

 v1.insert(v1.begin()+i, v2[i]) 

Vous pouvez le faire en utilisant à . Vous pouvez essayer l’exemple simple suivant:

 const size_t N = 20; std::vector vec(N); try { vec.at(N - 1) = 7; } catch (std::out_of_range ex) { std::cout << ex.what() << std::endl; } assert(vec.at(N - 1) == 7); 

Notez que cette méthode at retourne un allocator_type::reference , qui est ce cas est un int& . Utiliser at équivaut à affecter des valeurs comme vec[i]=...


Il y a une différence entre at et insert car il peut être compris avec l'exemple suivant:

 const size_t N = 8; std::vector vec(N); for (size_t i = 0; i<5; i++){ vec[i] = i + 1; } vec.insert(vec.begin()+2, 10); 

Si nous imprimons maintenant vec nous obtiendrons:

 1 2 10 3 4 5 0 0 0 

Si, au lieu de cela, nous avons fait vec.at(2) = 10 , ou vec[2]=10 , nous aurions

 1 2 10 4 5 0 0 0 

Voir un exemple ici: http://www.cplusplus.com/reference/stl/vector/insert/ eg .:

 ... vector::iterator iterator1; iterator1= vec1.begin(); vec1.insert ( iterator1+i , vec2[i] ); // This means that at position "i" from the beginning it will insert the value from vec2 from position i 

Votre première approche consistait à remplacer les valeurs de vec1 [i] par les valeurs de vec2 [i]