Jak mogę uzyskać listę z iteratora?

std::list<int> list;
auto it1 = list.insert(list.end(), 1);
auto it2 = list.insert(list.end(), 2);
auto it3 = list.insert(list.end(), 3);
auto it4 = list.insert(list.end(), 4);
auto it5 = list.insert(list.end(), 5);

list.erase(it3);

W dołączony kod, jestem w stanie usunąć it3 z listy. Co jeśli znam tylko iterator, może wymazać się iterator z listy bez zmiennej listy?

//Something like that
it2.list.erase(it2);
c++
1
wh1sp3r 7 marzec 2018, 22:20

3 odpowiedzi

Najlepsza odpowiedź

Nie możesz uzyskać listy z iteratora, możesz uzyskać iterator z listy. STD :: List kontener ma Erase Funkcja członka, Iterator nie, więc nie, nie można wymazać się. Jeśli znasz Iterator, podaj go do funkcji erase. Jak wskazano w komentarzach, nie należy nazwać zmiennej list, zwłaszcza jeśli masz using namespace std; oświadczenie gdzieś w kodzie, którego należy unikać.

1
Ron 7 marzec 2018, 20:27

Technicznie możliwe jest usuwanie elementu w Lista podwójnie połączona i aktualizuj sąsiednie węzły Linki po Erasure. Ale std::list utrzymuje również go Rozmiar (), który musi działać w O (1) od C ++ 11. Niemożliwe jest, aby zaktualizować rozmiar listy bez dostępu do samej listy.

2
ks1322 7 marzec 2018, 19:37

Jak stwierdzono w Dokumentacja {X0}} Spełnia koncepcję {X1}} tak, jak widać tam ani takiej koncepcji nie jest to przodkowie mają taką funkcjonalność Uzyskaj pojemnik, do którego należy.

1
Slava 7 marzec 2018, 19:25