c++ - 使用指针作为容器迭代器是否违反标准

标签 c++ pointers vector iterator random-access

Angew made a comment vector 使用原始指针作为迭代器类型很好。这让我大吃一惊。

我开始研究它,发现对 vector 迭代器的要求只是它们是 "Random Access Iterators"明确指出指针符合条件:

A pointer to an element of an array satisfies all requirements

编译器甚至为 vector 提供迭代器以进行调试的唯一原因,还是实际上我错过了 vector 的要求?

最佳答案

§ 24.2.1

Since iterators are an abstraction of pointers, their semantics is a generalization of most of the semantics of pointers in C++. This ensures that every function template that takes iterators works as well with regular pointers.

所以是的,使用指针满足 Random Access Iterator 的所有要求.

std::vector可能出于某些原因提供迭代器

  1. 标准说应该。

  2. 如果像 std::map 这样的容器会很奇怪或 std::set std::vector 时提供迭代器只提供一个value_type*指针。迭代器提供跨容器库的一致性。

  3. 它允许 vector 类型的特殊化,例如 std::vector<bool>其中一个 value_type*指针不是有效的迭代器。

关于c++ - 使用指针作为容器迭代器是否违反标准,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41853089/

相关文章:

c++ - 指向模板参数中重载函数的 MSVC 指针

c++ - 如何使用 STL 对数组进行 k-shuffle?

C++ new int[0]——它会分配内存吗?

C++ 类持有并返回指向另一个类的指针

r 沿向量搜索并计算平均值

arrays - Matlab 中的矢量化范围检查

c++ - 将 char 转换为 int 时 vector 下标超出范围

c - 在 C 中传递 char 指针

c++ - 声明指向多维数组的指针并分配数组

c++ - vector<string> 可以容纳多少数据?