基于相邻元素 c++ 的分段误差范围的循环

Segmentation error range-based for loop over neighbouring elements c++

本文关键字:误差 范围 循环 分段 元素 c++ 于相邻      更新时间:2023-10-16

>我正在尝试循环一个向量,需要操作当前元素以及下一个元素。我目前正在尝试这个,但出现一个 seg 错误:

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

因为这会导致空向量的负溢出(届时可能会发生非常糟糕的事情(。