STD ::向量迭代器类型和允许的操作

std::vector iterator type and permissible operations

本文关键字:操作 类型 向量 迭代器 STD      更新时间:2023-10-16

c 命名要求:连续的介绍器将迭代器的类型称为std::vector的连续。但是在这里没有针对连续迭代器的类型提供定义。

std :: vector ::开始介绍迭代器类型作为随机访问迭代器。

这是否意味着连续迭代器是随机访问类型的?

[a]连续迭代器类型随机访问?

是。

"连续迭代器"被定义(请参见N3884(为

随机访问迭代器也满足以下要求:

std::pointer_from(i) == std::addressof(*i)(当i是可重新定义时(

std::pointer_from(i + n) == std::pointer_from(i) + n(当i + n是有效的迭代器时(

so

  • "连续迭代器"暗示"随机访问迭代器"

  • "随机访问迭代器"并不暗示"连续迭代器"(有关反例请参见std::deque(

是的。CPPReference具有不错的图表,可以清楚地表明ContiguousIterator涵盖了RandomAccessIterator功能的超集(本身就是BidirectionalIterator的超集,它是ForwardIterator的超级,等等。

>

cppReference通过描绘不出现在C 标准中的迭代器类别和概念ContiguousIterator来使您误入歧途。C 17将连续性定义为迭代剂的属性,就像Mutability一样。[iterator.requirentess.general]/6:

迭代器进一步满足以下要求:对于积分值n和可反应的迭代器值a(a + n)*(a + n)等于*(addressof(*a) + n),称为连续迭代器连续迭代器

值得注意的是,此属性独立于迭代器类别。从理论上讲,您可以定义满足连续迭代器要求的迭代器要求以及任何迭代器类别的要求。

实际上,我认为这种灵活性对连续迭代器是随机访问迭代器的完善设计的设计提供了任何表现力。确实

a 连续容器是一个支持随机访问迭代器的容器,其成员类型iteratorconst_­iterator是连续的迭代器。

与[ITERATOR.REQUIREMENTS.General]/6的概念不完全矛盾,即连续性独立于迭代类别,但它确实引入了不一致的情况,这有助于引起混乱。