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

Sla*_*ica 1 c++ containers

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

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

此外,我的数据可能不在容器中(还),所以我设置了一个迭代器container.end()来反映它.

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

Ste*_*sop 6

23.2.4/9关于联合容器的说法:

insert和emplace成员不应影响迭代器的有效性和对容器的引用,并且擦除成员应仅使迭代器和对擦除元素的引用无效.

现在,有些地方标准谈到不会使"迭代器和对容器元素的引用"失效,从而排除end().我不相信这是其中之一 - 我很确定end()迭代器是"容器的迭代器".

23.3.5.4/1说的std::listinsert"不影响迭代器和引用的有效性",并23.3.5.4/3说,erase"仅无效的迭代器和引用擦除元素".同样,end()迭代器是迭代器,因此不排除它们的有效性.

需要注意的一点是,对于任何容器,swap都可以使end()迭代器无效(我认为这是因为有两个"自然"行为,要么结束迭代器指向同一容器的末尾,要么结束与它交换的那个,但标准不想指示哪个或排除其他可能性).但你不是交换,只是添加和删除元素.