【发布时间】:2021-09-30 06:11:48
【问题描述】:
如果我有这个代码:
#include <deque>
int main()
{
std::deque<int> d;
d.push_back(1);
d.push_back(2);
d.push_back(3);
d.push_back(4);
d.push_back(5);
for (std::deque<int>::iterator it = d.begin(); it != d.end(); it++)
{
d.pop_front();
}
return 0;
}
我想知道这是否有效,因为根据我的阅读,pop_front() 会使任何迭代器或对被删除元素的引用无效。因此,如果“it”设置为 d.begin(),那么我们调用 d.pop_front(),然后我们执行“it++”,因为对 pop_front() 的调用删除了“it”所指的元素,不会不是说再增加它是无效的吗?
【问题讨论】:
-
可以在 pop_front(); 之前增加循环中的迭代器;所以你不要持有无效的。
-
但问题应该是“你想达到什么目标。”
-
如果你想清空
deque,你可以使用std::dequeue::clear方法。 -
目的是遍历双端队列并在每个匹配特定条件的元素上调用 pop_front()。