名稱空間
變體
操作

C++ 命名要求: LegacyOutputIterator

來自 cppreference.com
 
 
C++ 命名要求
基本
型別屬性
全庫範圍




Container(容器)
容器元素
迭代器 (Iterator)
LegacyOutputIterator(傳統輸出迭代器)
流 I/O
格式化器
(C++20)
隨機數
併發
(C++11)
Ranges
多維檢視
其他

 

LegacyOutputIterator 是一個可以寫入所指向元素的 LegacyIterator

實現 LegacyOutputIterator 型別的例子是 std::ostream_iterator

LegacyForwardIteratorLegacyBidirectionalIteratorLegacyRandomAccessIterator 除了滿足其自身要求外,還滿足 LegacyOutputIterator 要求時,它被稱為 mutable

目錄

[編輯] 要求

型別 X 滿足 LegacyOutputIterator,如果

並且,給定

  • o,一個可寫入輸出迭代器的某種型別的值(可能有多種可寫入的型別,例如如果 operator= 可以是模板。沒有像輸入迭代器那樣的 value_type 概念)
  • r,型別為 X 的左值,

以下表達式必須有效並具有其指定的效果

表示式 返回 等價表示式 前置條件 後置條件 注意
*r = o (未使用) r 是可解引用的 r 是可遞增的 在此操作之後,r 不再需要是可解引用的,r 的任何先前值的副本不再需要是可解引用或可遞增的。
++r X& r 是可遞增的 r++r 指示相同的迭代器物件,r 是可解引用或尾後迭代器 在此操作之後,r 不再需要是可遞增的,r 的任何先前值的副本不再需要是可解引用或可遞增的。
r++ 可轉換為 const X& X temp = r;

++r;
return temp;

*r++ = o (未使用) *r = o;

++r;

[編輯] 註記

operator* 與輸出迭代器唯一的有效用法是在賦值的左側:operator* 可以返回一個代理物件,該物件定義了一個成員 operator=(該成員可以是一個模板)。

輸出迭代器可能沒有定義相等和不等。即使定義了 operator==x == y 也無需蘊含 ++x == ++y

透過同一輸出迭代器值進行賦值只發生一次:輸出迭代器上的演算法必須是單趟演算法。

透過輸出迭代器進行賦值應與遞增交替進行。雙重遞增是未定義行為(C++ 標準目前聲稱支援雙重遞增,這與 STL 文件相悖;這是 LWG issue 2035)。

純輸出迭代器允許將其 iterator_traits<X>::value_typeiterator_traits<X>::difference_typeiterator_traits<X>::pointeriterator_traits<X>::reference 宣告為 void(像 std::back_insert_iterator 這樣的迭代器正是如此,除了 difference_type,它現在被定義為滿足 std::output_iterator(C++20 起))。

[編輯] 標準庫

以下標準庫迭代器是輸出迭代器,但不是前向迭代器

寫入std::basic_ostream的輸出迭代器
(類模板) [編輯]
寫入std::basic_streambuf的輸出迭代器
(類模板) [編輯]
用於在容器中插入的迭代器介面卡
(類模板) [編輯]
用於在容器末尾插入的迭代器介面卡
(類模板) [編輯]
用於在容器前端插入的迭代器介面卡
(類模板) [編輯]

[編輯] 參閱

指定型別是給定值型別的輸出迭代器,即該型別的值可以寫入其中,並且可以進行前置和後置增量
(概念) [編輯]
迭代器庫 為迭代器、迭代器特性、介面卡和實用函式提供定義