std::weakly_incrementable

来自cppreference.com
< cpp‎ | iterator
 
 
迭代器库
迭代器概念
(C++20)
(C++20)
weakly_incrementable
(C++20)
迭代器原语
迭代器适配器
流迭代器
迭代器定制点
迭代器操作
(C++11)
(C++11)
范围访问
(C++11)(C++14)
(C++11)(C++14)
(C++17)(C++20)
(C++14)(C++14)
(C++14)(C++14)
(C++17)
(C++17)
 
定义于头文件 <iterator>
template<class I>

  concept weakly_incrementable =
    std::default_constructible<I> && 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*/<I>std::signed_­integral<I>true 或若 I 为包括所有运算符、隐式转换和 std::numeric_limits 特化的表现类似有符号整数类型的类,则为 true

此概念指定能以前后自增运算符自增的类型上的要求,不过这些自增运算不要求保持相等性,而且不要求类型自身为 std::equality_comparable

另外,给定类型 I 的任何对象 iI 仅若满足下列条件才实现 std::weakly_incrementable

  • 表达式 ++ii++ 拥有相同定义域
  • i 可自增,则 ++ii++ 均增加 i
  • i 可自增,则 std::addressof(++i) == std::addressof(i)

对于 std::weakly_­incrementable 类型, a == b 不蕴含 ++a == ++b 。弱可自增类型上的算法必须是单趟算法。这些算法能通过 std::istream_iterator 用于作为输入数据源的 istream

参阅

指定 weakly_incrementable 类型上的自增操作保持相等性,而且该类型为 equality_comparable
(概念)