命名空间
变体
操作

std::weakly_incrementable

来自 cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
弱可递增
(C++20)
(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&>; // 不需要是保持相等性的
            i++;                         // 不需要是保持相等性的

        };
(自 C++20 起)

有关 /*is-signed-integer-like*/ 的定义,请参见 is-integer-like .

此概念指定了对可以使用前增量和后增量运算符递增的类型的要求,但这些增量运算不一定是 保持相等性的,并且该类型本身也不需要是 std::equality_comparable.

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

[edit] 语义要求

对于类型为 I 的对象 i,只有在满足以下所有条件时,I 才模拟 std::weakly_incrementable

  • 表达式 ++ii++ 具有相同的域。
  • 如果 i 可递增,那么 ++ii++ 都将递增 i
  • 如果 i 可递增,那么 std::addressof(++i) == std::addressof(i).

[edit] 缺陷报告

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

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

[edit] 另请参阅

(C++20)
指定 weakly_incrementable 类型的增量运算 保持相等性 并且该类型是 equality_comparable
(概念) [edit]