基于分割误差范围的相邻元素循环 C++

Mar*_*ark 0 c++ loops

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

  for (const auto& element : * vec)
  {    
    const ClassObj * obj1 = &element;
    const ClassObj * obj2 = &element + 1;
    if(!obj2) break;
  }
Run Code Online (Sandbox Code Playgroud)

为什么这不起作用?您有更好的解决方案吗?

Dan*_*ica 5

可以在这里使用基于范围的 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
}
Run Code Online (Sandbox Code Playgroud)

大多数人可能更喜欢标准的基于索引的 for 循环:

for (size_t i = 1; i < vec.size(); i++)
{    
   ... // do whatever with vec[i - 1] and vec[i]
}
Run Code Online (Sandbox Code Playgroud)

注意我是故意不写的

for (size_t i = 0; i < vec.size() - 1; i++)  // don't do this
Run Code Online (Sandbox Code Playgroud)

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