簡體   English   中英

有人可以解釋他們的意思是list.pushback文檔(不會使迭代器無效)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM