【发布时间】:2011-08-28 05:01:18
【问题描述】:
STL 容器存在迭代器在容器更改时可能失效的问题。容器是否有可能通过添加调用 has_changed() 来宣布它已更改?
在某些操作之前查询 empty() 是很常见的。如果容器在会影响诸如 insert() 或 erase() 之类的迭代器的操作上设置布尔值,则可以在重用迭代器之前查询 has_changed() 。
疯了吗?
编辑感谢您的大量回复和深思熟虑。我希望我能奖励不止一位获奖者。
【问题讨论】:
-
如果你有一个
Container::has_changed()方法,你会怎么做?你会对你的迭代器做什么? -
实际上你可能想要
bool Container::is_still_valid(Container::iterator)。这既解决了“改变以来?”和“并非所有迭代器都因每次更改而失效”的反对意见。 (我称它为is_still_valid是因为如果将其限制为过去对该容器有效的迭代器,则实现会容易得多)
标签: c++