c++ - 将一个容器的迭代器复制到另一个迭代器容器中,然后再从第一个容器中删除它

标签 c++ iterator std

vector<obj> vec;
deque<iterator> q;
iterator it = vec.find(obj1);
q.push_back(it);
vec.erase(it);

我知道 it 会被复制到 q 但我想知道的是它会指向无效的东西?

最佳答案

迭代器保持有效,直到对原始容器执行可以使它们失效的操作。可以使迭代器无效的操作取决于容器的类型。

所以,是的,可以将迭代器存储在容器中。这是不可取的,因为没有什么可以阻止原始容器使它们无效 - 并且没有通用/可靠的方法让代码使用迭代器的容器来检测它,并避免使用无效的迭代器。

从容器中获取有效的迭代器并不是一项特别昂贵的操作,因此无论如何存储迭代器几乎没有什么好处。

关于c++ - 将一个容器的迭代器复制到另一个迭代器容器中,然后再从第一个容器中删除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35649787/

相关文章:

c++ - 核心转储的原因是什么?来自 oracle lib 的堆栈显示

c++ - 将文件读入结构数组,然后排序

c++ - 使用 cmake 传递复合编译器选项

c++ - rd在rdstate和rdbuf中代表什么?

c++ - list.sort 和 std::sort 有什么区别?

c++ - C++ 标准库线程安全吗?

c++ - 如何使用 Linux getrandom 系统调用生成一个范围内的随机数?

java - 使用 Iterator 迭代 2D 数组,就好像它是 1D 数组一样

c++ - 如何使用迭代器作为参数方法?

java - 为什么我需要在 ListIterator 中调用 previous() 两次才能进行 'reverse' 迭代?