c++ - 指针运算是否适用于迭代器?

标签 c++ arrays pointers vector iterator

假设您有以下 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::liststd::map 不支持 +7,但支持 ++

关于c++ - 指针运算是否适用于迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49724620/

相关文章:

c++ - 从 map 中删除对象指针时避免内存泄漏

c++ - 如何使用 C 或 C++ 将选项添加到 Windows 资源管理器上下文菜单?

c++ - C++17 中 const 字符串引用的语义应该是什么?

c++ - 为什么删除 const 会给我链接器错误?

javascript - 如何选择数组对象并将其传递给chart.js配置的数据设置?

JavaScript:在循环中附加来自二维数组的数据

c++ - C++ 中结构数组指针的问题

C++ 如何格式化指向类数组的指针?

arrays - 如何在 Matlab 中检查数组中 P 元素的所有组合与总 N 元素?

pointers - 删除指针值不会 panic