[英]can someone explain what they mean is list.pushback documentation (does not invalidate iterators)
在list.pushback中,文檔說明了這一點
由於%list的性質,此操作可以在恆定時間內完成,並且不會使迭代器和引用無效。
如何添加無法更改迭代器? 他們的意思是不使參考文件無效?
謝謝
這意味着在調用push_back
之前獲得的所有迭代器和引用仍然可以在以下情況之后使用:
std::list<int> numbers { 2, 3, 5, 7};
auto it = numbers.begin();
int& r = numbers.front();
numbers.push_back(11);
std::cout << *it << '\n'; // guaranteed to print 2
std::cout << r << '\n'; // guaranteed to print 2
其他數據結構不一定提供這樣的保證。 如果使用向量而不是列表,則每次調用push_back
都可能使調用之前獲得的所有迭代器和引用無效,因為容量可能已耗盡,在這種情況下,數據必須移動到更大的數組中。 使用無效的迭代器或引用會導致未定義的行為(讀取:可能發生任何事情)。
作為一個例子,比較行為std::vector
。 如果你這樣做:
std::vector<int> foo(1);
std::vector<int>::iterator it = foo.begin();
foo.push_back(2);
*it = 0;
這是非法的 - 調用push_back
的行為可能導致向量增長。 在釋放較舊的較小內存之前,這種增長會導致分配新內存並將內容移入其中。
使用std::list
不適用。 它是一個鏈表,因此當您添加新元素時,列表中的其他元素不會更改。 增長純粹是當地的事情。
將元素附加到list
不會更改其他元素,因此迭代器和對這些元素的引用仍然有效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.