我可以在STL :: vector :: iterator上进行指针运算

Dom*_*Dom 11 c++ stl vector

目前我使用迭代器来搜索向量并测试其元素.我使用了访问元素

std::vector<int>::iterator it;
if (*it == 0);
Run Code Online (Sandbox Code Playgroud)

我可以使用相同的指针算术样式逻辑来测试下一个元素(不改变我的迭代器)吗?

我首先需要看看它是否会将迭代器推出界限

if (it != myvec.end())
Run Code Online (Sandbox Code Playgroud)

然后测试当前元素和下一个元素

if (*it == 1 && *(it + 1) == 1)
Run Code Online (Sandbox Code Playgroud)

这会像我期望的那样使用指针吗?

R S*_*hko 16

是的,迭代器std::vector随机访问迭代器,因此您可以添加/减去整数值以获取其他有效迭代器.

从技术上讲,它可能不是指针算术,但它们就像指针一样.

  • @奥尔科特 - 正确。list::iterator 是双向迭代器,不支持随机访问。您可以使用“std::advance”通过一次调用来完成移动,但前进的复杂度对于列表来说是“O(n)”(对于向量来说是“O(1)”)。 (2认同)