首页 > 解决方案 > 基于分割错误范围的for循环遍历相邻元素c ++

问题描述

我正在尝试遍历一个向量,并且需要操纵当前元素以及下一个元素。我目前正在尝试这个,但得到一个段错误:

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

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

标签: c++loops

解决方案


可以在这里使用基于范围的 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

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


推荐阅读