Błędne wyniki przy dołączaniu wektora do siebie za pomocą funkcji kopiowania i cofania_serwera [duplikat]

To pytanie ma już tutaj odpowiedź:

Miły sposób na dodanie wektora do siebie 4 odpowiedzi

Zainspirowany przezto pytanie, pytając, jak dołączyć wektor do siebie, moja pierwsza myśl była następująca (i tak, zdaję sobie sprawęinsert jest teraz lepszą opcją):

#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 << ' ';
}

Jednak to drukuje:

1 2 3 1 * 3

* Jest inną liczbą za każdym razem, gdy program jest uruchamiany. Fakt, że tylko 2 jest zastępowane, jest szczególny, a jeśli rzeczywiście istnieje jakieś wytłumaczenie, chciałbym to usłyszeć. Kontynuując, jeśli dołączę do innego wektora (kopię oryginału), będzie on wyświetlany poprawnie. Wyprowadza również poprawnie, jeśli dodam następujący wiersz przedcopy jeden:

vec.reserve (2 * vec.size());

Byłem pod wrażeniemstd::back_inserter był bezpiecznym sposobem dodawania elementów na koniec kontenera, mimo że wcześniej nie rezerwował pamięci. Jeśli moje zrozumienie jest prawidłowe, co jest nie tak z linią kopiowania?

Zakładam, że nie ma to nic wspólnego z kompilatorem, ale używam GCC 4.7.1.

questionAnswers(1)

yourAnswerToTheQuestion