命名空间
变体
操作

C++ 命名要求: LegacyBidirectionalIterator

来自 cppreference.cn
 
 
C++ 命名要求
基本
类型属性
全库范围




Container(容器)
容器元素
迭代器 (Iterator)
LegacyBidirectionalIterator(传统双向迭代器)
流 I/O
格式化器
随机数
并发
Ranges(范围)
多维视图
其他

 

一个 LegacyBidirectionalIterator 是一个 LegacyForwardIterator,它可以双向移动(即可以递增和递减)。

如果一个 LegacyBidirectionalIterator it 源自一个 Container,那么 itvalue_type 与容器的相同,因此解引用 (*it) 获取容器的 value_type

目录

[编辑] 要求

类型 It 满足 LegacyBidirectionalIterator,如果

并且,给定

  • ab,类型为 It 的左值
  • reference,由 std::iterator_traits<It>::reference 表示的类型

以下表达式必须有效并具有其指定的效果

表达式 返回 等效表达式 注意
--a It& 前置条件
  • a 是可递减的(存在这样的 b,使得 a == ++b

后置条件

  • a可解引用的
  • --(++a) == a
  • 如果 --a == --ba == b
  • a--a 指代同一个迭代器对象
a-- 可转换为 const It& It temp = a;

--a;

return temp;
*a-- reference

一个 *可变* LegacyBidirectionalIterator 是一个 LegacyBidirectionalIterator,它还满足 LegacyOutputIterator 的要求。

[编辑] 注意

起始迭代器不可递减,如果计算 --container.begin(),则行为未定义。

双向迭代器不必可解引用即可递减(特别是,尾后迭代器不可解引用但可递减)。

概念

对于 std::iterator_traits 的定义,定义了以下仅用于说明的概念。

template<class I>

concept __LegacyBidirectionalIterator =
    __LegacyForwardIterator<I> && requires(I i)
    {
        {  --i } -> std::same_as<I&>;
        {  i-- } -> std::convertible_to<const I&>;
        { *i-- } -> std::same_as<std::iter_reference_t<I>>;

    };

其中,仅用于解释的概念 __LegacyForwardIteratorLegacyForwardIterator 中描述。

(C++20 起)

[编辑] 缺陷报告

下列更改行为的缺陷报告追溯地应用于以前出版的 C++ 标准。

缺陷报告 应用于 发布时的行为 正确的行为
LWG 299
(N3066)
C++98 当时要求 *a-- 的返回类型
可转换为 T
将返回
类型更改为 reference[1]
LWG 383 C++98 当时要求 --a 之后 b 必须是可解引用的 现在要求 a 是可解引用的
LWG 1212
(N3066)
C++98 *a-- 的返回类型与 LegacyForwardIterator 要求
*a++ 的返回类型不匹配
将返回
类型更改为 reference
  1. 这个问题最初由 N2758 (迭代器概念) 解决,但后来从 C++ 标准中删除。

[编辑] 参阅

指定forward_iterator是双向迭代器,支持向后移动
(概念) [编辑]
迭代器库 为迭代器、迭代器特性、适配器和实用函数提供定义