名稱空間
變體
操作

C++ 命名要求: LegacyBidirectionalIterator

來自 cppreference.com
 
 
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是雙向迭代器,支援向後移動
(概念) [編輯]
迭代器庫 為迭代器、迭代器特性、介面卡和實用函式提供定義