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 odpowiedziZainspirowany 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.