2016-10-31 20 views
5

Mam dwie listy w C++, std::list<T> List1 i std::list<T*> List2;. Teraz chciałbym zrobić następującą operację kilkakrotnie:C++: Zachowanie funkcji push_back() i wstecz() ze wskazówkami

List1.push_back(new_object); 
List2.push_back(&List1.back()); 

Moje pytanie: Czy odesłanie w lista2 pozostać ważne po każdym kroku? I.e .: Czy pierwszy element na liście 2 wciąż odnosi się do pierwszego na liście 1 itd.?

+3

Nie wyjaśniaj po angielsku, co jest bardziej zrozumiałe w C++. Po prostu napisz 'std :: list List1;' itp. – MSalters

Odpowiedz

9

Tak, pozostaje ważny. std::list wstawienie nie powoduje unieważnienia iteratorów (lub wskaźników do treści w tym przypadku).

+3

Właściwość udostępniana przez większość kontenerów, ale co ważniejsze ** nie ** przez 'std :: vector '. – MSalters

+0

@MSalters, cena, którą musimy zapłacić za iterację przyjazną dla pamięci podręcznej. – StoryTeller

+0

Dziękuję bardzo za odpowiedź! – Richard