вставить элемент в определенную позицию вектора - PullRequest
53 голосов
/ 18 июля 2011

Я хочу вставить элемент в определенную позицию вектора, могу ли я просто использовать присвоение:

// vec1 and 2 have the same length & filled in somehow
vec1;
vec2;

vec1[i] = vec2[i] // insert vec2[i] at position i of vec1

или мне нужно использовать insert ():

vector<sometype>::iterator iterator = vec1.begin();

vec1.insert(iterator+(i+1), vec2[i]);

Ответы [ 3 ]

96 голосов
/ 18 июля 2011
vec1[i] = vec2[i]

установит значение vec1[i] в значение vec2[i]. Ничего не вставлено. Ваш второй подход почти правильный. Вместо +i+1 вам нужно просто +i

v1.insert(v1.begin()+i, v2[i])
12 голосов
/ 02 ноября 2015

Вы можете сделать это, используя на .Вы можете попробовать следующий простой пример:

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);

Обратите внимание, что метод at возвращает allocator_type::reference, то есть в этом случае int&.Использование at эквивалентно присвоению значений, таких как vec[i]=....


Существует разница между at и insert , что можно понять из следующего примера:

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);

Если мы теперь распечатаем vec, мы получим:

1 2 10 3 4 5 0 0 0

Если бы вместо этого мы сделали vec.at(2) = 10 или vec[2]=10, мы получили бы

1 2 10 4 5 0 0 0
0 голосов
/ 18 июля 2011

См. Пример здесь: 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

Ваш первый подход состоял в замене значений из vec1 [i] на значения из vec2 [i]

...