STD ::向量迭代器类型和允许的操作
std::vector iterator type and permissible operations
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 连续容器是一个支持随机访问迭代器的容器,其成员类型
iterator
和const_iterator
是连续的迭代器。
与[ITERATOR.REQUIREMENTS.General]/6的概念不完全矛盾,即连续性独立于迭代类别,但它确实引入了不一致的情况,这有助于引起混乱。
- 逐位操作的隐式类型转换
- 像union_这样的 Boost.Geometry 操作如何处理浮点类型的基本不精确性?
- 为什么 std::lerp 不适用于任何已实现所需操作的类型?
- C++:将值赋值给原始数据类型(例如布尔值)是原子操作吗?
- 标量类型的特征模板无法编译固定大小的子矩阵操作
- 为表示一个或多个操作的C++函数的int参数寻找类型安全的替换
- 对于 CPU 无法原子操作的类型,std::atomic 有什么意义?
- "+=" 操作在类型之间不起作用 std::复杂<double>和__complex__双精度
- 使用用户定义的操作隐式转换为类型
- 元数据操作失败LNK2022错误 (8013118D):重复类型中的布局信息不一致 (选择设备参数):(0x020002
- 是否有可能具有放入容器的移动操作的类型?
- 在 Fortran 中泛化特定声明类型的操作
- 为什么对小于 4 个字节的整数类型的位操作会发生意外行为?
- 对标准类型使用原子操作
- POD 类型的原子按位操作
- CAN模板类型推理考虑原始操作类型转换
- 是浮点操作,导致IEC 559/IEEE 754浮点类类型的无限行为
- STD ::向量迭代器类型和允许的操作
- 从网络应用程序拆包操作类型的正确方式
- 映射平台特定的可互操作类型