假设您有以下向量和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的向量?
我知道迭代器类型本质上是一个指针,这是有道理的,但我想确定。
答案 0 :(得分:2)
向量上的迭代器是指针的无成本抽象。所以++
向前移动一个,+7
移动7等等。
向量迭代器是随机访问迭代器,因此它们的行为与指针非常相似。就像指针一样,超越一个过去的最后一个元素(又名.end()
)是未定义的行为。
其他迭代器更受限制; std::list
或std::map
不支持+7
,但支持++
。