假设您有以下 vector 和 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字节移动到数组的下一个long元素。然而,对于 vector ,指针运算的相同原理是否适用?即向 start_itr 加 1 意味着向上移动 8 个字节到下一个元素 b/c 它是一个 longs vector ?
我知道迭代器类型本质上是一个指针,这是有道理的,但我想确定一下。
最佳答案
vector 上的迭代器是指针的免费抽象。所以 ++
向前移动 1,+7
移动 7,等等。
vector 迭代器是随机访问迭代器,因此它们的行为很像指针。就像指针一样,前进到最后一个元素(又名 .end()
)是未定义的行为。
其他迭代器更受约束; std::list
或 std::map
不支持 +7
,但支持 ++
。
关于c++ - 指针运算是否适用于迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49724620/