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

时间:2010-02-28 02:10:10

标签: c++ stl vector

目前我使用迭代器搜索向量并测试其元素。我使用

访问元素
std::vector<int>::iterator it;
if (*it == 0);

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

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

if (it != myvec.end())

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

if (*it == 1 && *(it + 1) == 1)

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

3 个答案:

答案 0 :(得分:16)

是的,std::vector的迭代器是random access iterators,因此您可以添加/减去整数值以获得其他有效的迭代器。

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

答案 1 :(得分:3)

这确实可以用作向量迭代器是随机访问迭代器。这不仅可以像使用指针一样对它们进行操作,而且它们几乎都是使用指针/指针算法实现的。

答案 2 :(得分:1)

好吧,如果迭代器在容器的最后一个元素上,那么

*(it + 1) 

有未定义的行为。 你应该检查一下

it + 1 != end
在解除引用之前