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<sometype>::iterator iterator = vec1.begin();
vec1.insert(iterator+(i+1), vec2[i]);
vec1[i] = vec2[i]
définira la valeur de vec1[i]
à 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 at . Vous pouvez essayer l'exemple simple suivant:
const size_t N = 20;
std::vector<int> 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 la méthode at
renvoie un allocator_type::reference
, Ce qui est le cas int&
. Utiliser at
équivaut à assigner des valeurs telles que vec[i]=...
.
Il y a une différence entre at
et insert comme cela peut être compris avec l'exemple suivant:
const size_t N = 8;
std::vector<int> 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 aurons:
1 2 10 3 4 5 0 0 0
Si, au lieu de cela, nous faisions 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/ par exemple:
...
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]