gpt4 book ai didi

c++ - end() 返回的迭代器对于哪个标准容器(如果有)是持久的?

转载 作者:塔克拉玛干 更新时间:2023-11-03 08:27:14 24 4
gpt4 key购买 nike

我需要一种方法来快速访问容器中的数据。

所以我记得那个数据位置的迭代器。之后可能会修改容器(添加和删除元素),但如果我使用不会使我的迭代器无效的容器类型(如 std::mapstd::list)我很好。

此外,我的数据可能还不在容器中,因此我将迭代器设置为 container.end() 以反射(reflect)这一点。

哪个标准容器保证 end() 在添加和删除元素时不会改变?所以我仍然可以将我的迭代器与 container.end() 返回的值进行比较,而不会得到假阴性。

最佳答案

23.2.4/9 谈到关联容器:

The insert and emplace members shall not affect the validity of iterators and references to the container, and the erase members shall invalidate only iterators and references to the erased elements

现在,有些地方的标准谈到不使“容器元素的迭代器和引用”无效,因此排除了 end()。我不相信这是其中之一 - 我很确定 end() 迭代器是“容器的迭代器”。

23.3.5.4/1 对 std::listinsert “不影响迭代器和引用的有效性”,23.3.5.4/3 说erase “仅使迭代器和对已删除元素的引用无效”。同样,end() 迭代器是迭代器,因此不排除它们的有效性。

需要注意的一件事是,对于任何容器,swap 都可能使 end() 迭代器无效(我假设这是因为有两种“自然”行为,要么是结束迭代器指向同一个容器的末尾或交换它的那个容器的末尾,但标准不想规定哪个或排除其他可能性)。但您并没有交换,只是添加和删除元素。

关于c++ - end() 返回的迭代器对于哪个标准容器(如果有)是持久的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15414541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com