2011-10-15 90 views
1

我知道任何插入或刪除STL列表操作都不會使其迭代器失效。 但是,我不確定列表是否仍然保留迭代器本身。存儲STL列表迭代器的指針是否安全?

那麼,我可以存儲列表迭代器的指針,並在以後使用它?

+1

'std :: list'不公開任何迭代器引用。一些示例代碼可以更容易理解你的意思。 –

+0

好吧,我明白了。 begin()或其他方法返回迭代器的副本,而不是迭代器的引用。所以這是不可能的,因爲存儲指向局部變量的指針是不安全的。我對嗎? – ljh131

+0

@ ljh131如果讓指針的活期比創建本地變量的堆棧幀長,則將指針存儲到本地變量是不安全的。如果在變量退出它的作用域之前停止使用指針,那麼你沒問題(並不是說這在大多數情況下特別有用)。 –

回答

3

對於std::list

插入
所有迭代器和引用不受影響[23.2.2.3/1]

箱子情況下擦除
只有迭代器和對擦除元素的引用無效[23.2.2.3/3]

所以,只要你擦除一個元素並且不使用它存儲的迭代器,它就是安全的。

+1

ljh131在問題中提到了迭代器指針。你應該提到需要存儲迭代器值的副本。 –