我正在尝试循环一个向量,并且需要操作当前元素以及下一个元素。我目前正在尝试这个,但出现了段错误:
for (const auto& element : * vec)
{
const ClassObj * obj1 = &element;
const ClassObj * obj2 = &element + 1;
if(!obj2) break;
}
Run Code Online (Sandbox Code Playgroud)
为什么这不起作用?您有更好的解决方案吗?
可以在这里使用基于范围的 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)
因为这会导致空向量出现负溢出(然后可能会发生非常糟糕的事情)。
| 归档时间: |
|
| 查看次数: |
93 次 |
| 最近记录: |