c++ - 如何可靠地“钳制”迭代器?
问题描述
我正在遍历一个向量,如下所示:
for(auto it = myVector.begin(); it != myVector.end(); ++it){
// Do some stuff
}
在循环内部,根据某些条件,我向迭代器添加一个可变数量,以便“向前跳跃”(但重要的是,永远不要“向后移动”)。什么是“钳制”迭代器的“正确”方式(或者至少是一种有效/可靠的方式),这样我最终不会超出向量的末尾(最终导致程序崩溃或,更糟糕的是,未定义的行为)?
解决方案
if (myVector.end() - it < variable_amount)
it += variable_amount;
else
break;
使用std::distance
andstd::advance
将允许它与非随机访问迭代器一起工作,但这对它们来说是一种低效的算法,所以我建议不要使用它们。
非随机访问迭代器的算法:
for (; variable_amount-- && it != myList.end(); ++it);
推荐阅读
- c# - 如何避免构造函数中的冗余计算
- c# - 设置显式值时使用的数据库默认值
- java - 映射器的可重用性
- shell - grep 根据特定字符获取整个单词
- google-oauth - 如何使用 Google openid 检查声明名称 amr?
- python - 关闭蜘蛛时 Scrapy/BigQuery 失败并发送此错误:OSError: [Errno 5] Input/Output error
- c# - 如何将包含 CorelDraw 项目的 DocX 转换为 PDF?
- c# - 每次我的测试运行时更新我的 .Json 中的值
- unity3d - Unity的四元数旋转矩阵是如何计算的?
- reactjs - this.props.form.field.isFieldTouched 在 antd 表单 Upload.Dragger 中无法正常工作