Namespaces
Variants

std:: contiguous_iterator

From cppreference.net
Iterator library
Iterator concepts
contiguous_iterator
(C++20)


Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
定义于头文件 <iterator>
(C++20 起)

contiguous_iterator 概念通过保证所指示的元素在内存中连续存储,对 random_access_iterator 进行了细化。

给定一个满足 contiguous_iterator 概念的迭代器 i 、哨位 s 和非负整数 n

这意味着程序不能依赖解引用、递增或递减连续迭代器 i 产生的任何副作用,因为标准库函数可能通过 std:: to_address ( i ) 获取指针进行操作,而非直接操作 i

(since C++26)

目录

迭代器概念判定

此概念的定义通过仅用于阐述的别名模板 /*ITER_CONCEPT*/ 进行规范。

为确定 /*ITER_CONCEPT*/ < I > ,令 ITER_TRAITS < I > 表示:当特化 std:: iterator_traits < I > 由主模板生成时为 I ,否则为 std:: iterator_traits < I >

  • ITER_TRAITS < I > :: iterator_concept 有效且指名一个类型,则 /*ITER_CONCEPT*/ < I > 表示该类型。
  • 否则,若 ITER_TRAITS < I > :: iterator_category 有效且指名一个类型,则 /*ITER_CONCEPT*/ < I > 表示该类型。
  • 否则,若 std:: iterator_traits < I > 由主模板生成,则 /*ITER_CONCEPT*/ < I > 表示 std::random_access_iterator_tag
    (即假定 std:: derived_from < /*ITER_CONCEPT*/ < I > , std:: contiguous_iterator_tag > false 。)
  • 否则, /*ITER_CONCEPT*/ < I > 不表示任何类型并导致替换失败。

语义要求

a b 可解引用 迭代器, c 为类型 I 的不可解引用迭代器,且满足 b 可从 a 抵达 c 可从 b 抵达,则类型 I 满足 contiguous_iterator 概念当且仅当其包含的所有概念均被满足且符合以下全部条件:

等值保持性

标准库概念的 requires 表达式 中声明的表达式必须满足 等值保持 特性(除非另有说明)。

隐式表达式变体

对于某个常量左值操作数使用非修改表达式的 requires 表达式 同样需要 隐式表达式变体

注释

contiguous_iterator 由每个指向完整对象类型的指针类型所建模。

标准库中要求满足 C++17 LegacyContiguousIterator 要求的迭代器类型,在 C++20 中也必须满足 contiguous_iterator 概念模型。

缺陷报告

以下行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 适用标准 发布时行为 正确行为
LWG 3607 C++20 contiguous_iterator 可能具有自定义的
ranges::iter_move ranges::iter_swap 行为
禁止
LWG 4170 C++20 值初始化的 contiguous_iterator
可能无法表示空范围
保证

参见

指定 bidirectional_iterator 为随机访问迭代器,支持常数时间内的前进后退操作及下标访问
(概念)