c++ - 使用迭代器从两端开始在列表中移动并在中间停止

标签 c++ list loops iterator

我正在尝试为一些具有两个迭代器的代码创建一个 while 循环,一个从列表的开头开始递增,另一个从列表的结尾开始递减,希望它们在到达列表的中间并且整个列表已被覆盖。当用 vector 迭代器做类似的事情时,我只能做 while (limit > first),但这不起作用,并且在用列表迭代器完成时会出现编译器错误。我正在解决一本书的问题,该问题的任务要求是除了两个给定的迭代器之外,不在代码中分配任何新内存,并且无法弄清楚如何正确地移动列表的元素。

最佳答案

反向迭代器取消对前一个元素的引用,而不是它们内部引用的元素(“基础”)。 (有关直观解释,请参阅 this image。)

这意味着如果您有:

auto forward = a_list.begin();
auto backward = a_list.rbegin();

然后你交替递增forwardbackward,会有一段时间forward == backward.base()。您必须在递增每个 迭代器之后测试它,不能同时递增 否则它们可能会在您测试它们之前相互交叉。

关于c++ - 使用迭代器从两端开始在列表中移动并在中间停止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43547926/

相关文章:

c++ - 错误 C2678 : '==' binary: no operator found which takes a left operand of type 'CSchemaString' (or there is no acceptable conversion)

c++ - boost::thread::join() 崩溃试图引用销毁的 thread_info

java - 在 Java 中使用 scala 列表和枚举

c - 在循环迭代之间等待线程池中的线程

c++ - 设置派生对象的基础对象?

c++ - VS2015 C++静态初始化崩溃,可能是bug

list - Groovy 合并两个列表?

python - 比较命名元组列表中的多个(但不是全部)元素

c# - 在循环中分配具有相似名称的不同变量

java - 我的 Java 网络项目中存在循环和流控制问题