指针算术是否适用于迭代器?

时间:2018-04-09 02:04:10

标签: c++ arrays pointers vector iterator

假设您有以下向量和C数组:

vector<long> v = {1,2,3,4,5};
for (auto start_itr = v.begin(); start_itr != v.end(); ++start_itr) {
    statements;
}

long ary[5]{1,2,3,4,5};
for (long *ptr = ary; ptr < (ary+5); ++ptr) {
    statements;
}

在数组的代码中,++ ptr是指向ptr添加1,即指针运算 - 添加8个字节移动到数组的下一个长元素。但是,对于向量,指针算法的原理是否适用;即向start_itr添加1意味着将8个字节向上移动到下一个元素b / c它是longs的向量?

我知道迭代器类型本质上是一个指针,这是有道理的,但我想确定。

1 个答案:

答案 0 :(得分:2)

向量上的迭代器是指针的无成本抽象。所以++向前移动一个,+7移动7等等。

向量迭代器是随机访问迭代器,因此它们的行为与指针非常相似。就像指针一样,超越一个过去的最后一个元素(又名.end())是未定义的行为。

其他迭代器更受限制; std::liststd::map不支持+7,但支持++