首页 > 解决方案 > 如何可靠地“钳制”迭代器?

问题描述

我正在遍历一个向量,如下所示:

for(auto it = myVector.begin(); it != myVector.end(); ++it){

    // Do some stuff

}

在循环内部,根据某些条件,我向迭代器添加一个可变数量,以便“向前跳跃”(但重要的是,永远不要“向后移动”)。什么是“钳制”迭代器的“正确”方式(或者至少是一种有效/可靠的方式),这样我最终不会超出向量的末尾(最终导致程序崩溃或,更糟糕的是,未定义的行为)?

标签: c++iterator

解决方案


if (myVector.end() - it < variable_amount)
    it += variable_amount;
else
    break;

使用std::distanceandstd::advance将允许它与非随机访问迭代器一起工作,但这对它们来说是一种低效的算法,所以我建议不要使用它们。

非随机访问迭代器的算法:

for (; variable_amount-- && it != myList.end(); ++it);

推荐阅读