c++ - 基于分割错误范围的for循环遍历相邻元素c ++
问题描述
我正在尝试遍历一个向量,并且需要操纵当前元素以及下一个元素。我目前正在尝试这个,但得到一个段错误:
for (const auto& element : * vec)
{
const ClassObj * obj1 = &element;
const ClassObj * obj2 = &element + 1;
if(!obj2) break;
}
为什么这不起作用,您有更好的解决方案吗?
解决方案
可以在这里使用基于范围的 for 循环,但它有点难看:
for (const auto& element : vec)
{
const auto* obj1 = &element;
if (obj1 == &vec.back()) break;
const auto* obj2 = &element + 1;
... // do whatever with *obj1 and *obj2
}
大多数人可能更喜欢标准的基于索引的 for 循环:
for (size_t i = 1; i < vec.size(); i++)
{
... // do whatever with vec[i - 1] and vec[i]
}
注意我故意不写
for (size_t i = 0; i < vec.size() - 1; i++) // don't do this
因为这会导致空向量的负溢出(然后可能会发生非常糟糕的事情)。
推荐阅读
- json - 如何从验证数据更新一个 eloquent json 列而不覆盖列中存储的内容?
- reactjs - 如何使用 map 方法打印对象数组
- python - 如何在无服务器离线的子目录中引用处理程序?
- node.js - Docker 文件:错误找不到 package.json 文件
- python - 构造结构化数组时,元组和列表有什么区别?
- node.js - aws-serverless-express 连接错误 - EPIPE
- r - 将堆积条形图从 R 转换为 ggplot2
- ssl - WebLogic(使用 SSL)作为任何 WSGI Web 服务器的代理
- java - java如何知道调用哪个方法?
- stripe-payments - Stripe 创建令牌适用于无效的 cvv