Jestem obecnie w sytuacji, w której chciałbym powielić pewne elementy w wektorze. W skrócie, mój kod jest podobny do następującego:Wstawianie w wektorze w odniesieniu do danych tego samego wektora
std::vector<MyStruct> v;
// ...
auto toDuplicate = std::find(v.begin(), v.end(), [](const MyStruct &s) { return true; /*In reality, a bit more complex*/ });
v.insert(toDuplicate, nrOfDuplicates-1, *toDuplicate);
// Signature: insert(iterator, size_t, const value_type &)
Tak więc, w tym przypadku, jeżeli pojemność jest mniejsza od ostatecznej pojemności, std :: vector musi realloc swoich danych wewnętrznych, że mój referencyjne wstawione dane są nieprawidłowe.
Implementacja STL, z którego aktualnie korzystam (MSVC2013), zawiera ochronę przed tego rodzaju wstawkami, ponieważ wykona kopię mojego elementu, jeśli będzie musiał ponownie przydzielić. Jednak nie jestem pewien, czy jestem w stanie polegać na tym zachowaniu, czy też wymaga ode mnie samodzielnego wykonania kopii? (Wolę unikać patrzenia na tego rodzaju błędy podczas uaktualniania do nowej implementacji STL)
Krótko mówiąc: Czy mogę wywołać insert() na wektorze z odniesieniem do elementu w tym samym wektor?
Jestem głupi. Przepraszam. – Slava