Неправильные результаты при добавлении вектора к себе с использованием 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.

Ответы на вопрос(1)

Ваш ответ на вопрос