命名空间
变体
操作

std::weakly_incrementable

来自 cppreference.cn
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
weakly_incrementable
(C++20)
迭代器原语
算法概念和工具
间接可调用概念
通用算法要求
(C++20)
(C++20)
(C++20)
实用工具
(C++20)
迭代器适配器
范围访问
(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>
template< class I >

    concept weakly_incrementable =
        std::movable<I> &&
        requires(I i) {
            typename std::iter_difference_t<I>;
            requires /*is-signed-integer-like*/<std::iter_difference_t<I>>;
            { ++i } -> std::same_as<I&>; // not required to be equality-preserving
            i++;                         // not required to be equality-preserving

        };
(自 C++20 起)

关于 /*is-signed-integer-like*/ 的定义,见 is-integer-like 。

此概念指定了可以与前缀和后缀递增运算符一起递增的类型的要求,但这些递增操作不一定是保等值 (equality-preserving) 的,并且该类型本身也不一定需要是 std::equality_comparable

对于 std::weakly_incrementable 类型,a == b 并不意味着 ++a == ++b。弱递增类型上的算法必须是单遍算法。这些算法可以通过 std::istream_iterator 与 istream 一起用作输入数据的来源。

[编辑] 语义要求

对于类型 I 的对象 i,仅当满足以下所有条件时,I 才建模 std::weakly_incrementable

  • 表达式 ++ii++ 具有相同的域。
  • 如果 i 是可递增的,则 ++ii++ 都会推进 i
  • 如果 i 是可递增的,则 std::addressof(++i) == std::addressof(i)

[编辑] 缺陷报告

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

DR 应用于 发布时的行为 正确的行为
P2325R3 C++20 需要 default_initializable 不需要

[编辑] 参见

指定 weakly_incrementable 类型上的递增操作是保等值 (equality-preserving) 的,并且该类型是 equality_comparable
(概念) [编辑]