【发布时间】:2013-03-14 16:13:18
【问题描述】:
我需要一种方法来快速访问容器中的数据。
所以我记得那个数据位置的迭代器。之后可能会修改容器(添加和删除元素),但如果我使用不会使我的迭代器无效的容器类型(如 std::map 或 std::list)我很好。
我的数据可能还没有在容器中,所以我将迭代器设置为container.end() 以反映这一点。
哪个标准容器保证end() 在添加和删除元素时不会改变?所以我仍然可以将我的迭代器与container.end() 返回的值进行比较,而不会得到假阴性。
【问题讨论】:
-
这是未定义的,不应依赖。正常的迭代器失效规则适用。 (您是否试图过早优化?)
-
@sehe 如果应用正常的迭代器失效规则,那么它不是未定义的。正如我所提到的,我使用的容器类型不会使我的迭代器失效。
-
我也认为它是未定义的,但是如果你应用正常的失效规则,请注意:当你收缩一个容器时,可以认为过去的最后一个或
end元素被删除了。 -
见this related question。显然,在 C++03 中,普通规则不适用于
end,并且 last-last 迭代器可能会失效。
标签: c++ containers