Неправильные результаты при добавлении вектора к себе с использованием copy и back_inserter [duplicate]
This question already has an answer here:
Nice way to append a vector to itself 4 answersВдохновленныйэтот вопросспрашивая, как добавить вектор к себе, моей первой мыслью было следующее (и да, я понимаю,insert
сейчас лучший вариант):
#include <algorithm>
#include <iostream>
#include <iterator>
#include <vector>
int main() {
std::vector<int> vec {1, 2, 3};
std::copy (std::begin (vec), std::end (vec), std::back_inserter (vec));
for (const auto &v : vec)
std::cout << v << ' ';
}
Тем не менее, это печатает:
1 2 3 1 * 3
* Каждый раз, когда запускается программа, это другое число. Тот факт, что он заменяет только 2, является специфическим, и если на самом деле есть объяснение этому, мне было бы интересно его услышать. Продолжая, если я добавляю другой вектор (копию оригинала), он выводит корректно. Это также выводит правильно, если я добавлю следующую строку передcopy
один:
vec.reserve (2 * vec.size());
Я был под впечатлениемstd::back_inserter
был безопасным способом добавления элементов в конец контейнера, несмотря на то, что он не резервировал память заранее. Если мое понимание правильное, что не так с строкой копирования?
Я предполагаю, что это не имеет ничего общего с компилятором, но я использую GCC 4.7.1.