使用指针作为容器迭代器违反标准

Jon*_*Mee 6 c++ pointers iterator vector random-access

Angew评论vector使用原始指针作为迭代器类型很好.那种情绪让我陷入了困境.

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

指向数组元素的指针满足所有要求

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

lcs*_*lcs 3

\n

\xc2\xa7 24.2.1

\n

由于迭代器是指针的抽象,因此它们的语义是 C++ 中大多数指针语义的概括。这确保了每个采用迭代器的函数模板都可以与常规指针一起使用。

\n
\n

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

\n

std::vector可能出于几个原因提供迭代器

\n
    \n
  1. 标准说应该。

    \n
  2. \n
  3. std::map如果诸如或 之类的容器std::set提供迭代器而std::vector只提供指针,那就很奇怪了value_type*。迭代器提供跨容器库的一致性。

    \n
  4. \n
  5. 它允许向量类型的特殊化,例如,std::vector<bool>指针value_type*不是有效的迭代器。

    \n
  6. \n
\n