gpt4 book ai didi

c++ - 迭代 std::deque 时出现奇怪的运行时错误

转载 作者:太空狗 更新时间:2023-10-29 19:59:47 25 4
gpt4 key购买 nike

考虑以下代码:

 1  typedef std::deque<int> mydeque_t;
2 mydeque_t mydeque;
3
4 mydeque_t::iterator start = mydeque.begin();
5
6 for (int i = 0; i != 1000; ++i)
7 mydeque.push_back(i);
8
9 for (mydeque_t::iterator myint = start; myint != mydeque.end(); ++myint)
10 *myint += 1;

执行它时,我总是在第 10 行遇到运行时错误(实例:http://ideone.com/juQAA)。但是,当我将第 6 行更改为 for (int i = 0; i != 100;++i) 时,代码工作正常。

通过将 start 定义(第 4 行)移到第一个 for 循环后面,可以轻松修复代码,但在我的示例中,我需要将其保留在它之前。但是即使这样我认为它应该运行良好,谁能向我解释为什么它不能运行?

最佳答案

调用 push_back() 后,所有迭代器都将失效。来自 deque::push_back() :

Appends the given element value to the end of the container. All iterators are invalidated. No references are invalidated.

猜测:该代码可能适用于 100 而不是 1000 因为双端队列的内部存储不必重新分配给容纳导致 begin() 迭代器保持有效的 100 元素。

关于c++ - 迭代 std::deque 时出现奇怪的运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11224353/

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