名稱空間
變體
操作

C++ 命名要求: LegacyIterator

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




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

 

LegacyIterator 要求描述了可用於標識和遍歷容器元素的型別。

LegacyIterator 是其他迭代器型別所使用的基礎要求集:LegacyInputIteratorLegacyOutputIteratorLegacyForwardIteratorLegacyBidirectionalIteratorLegacyRandomAccessIterator。迭代器可以被視為指標的抽象。

所有迭代器類別都只要求在給定類別下以常數時間(均攤)可實現的功能。因此,迭代器的要求表和概念定義(C++20 起)不指定複雜度。

目錄

[編輯] 要求

如果型別 It 滿足 LegacyIterator,則

  • 型別 It 滿足 CopyConstructible,並且
  • 型別 It 滿足 CopyAssignable,並且
  • 型別 It 滿足 Destructible,並且
  • 型別 It 滿足 Swappable,並且
  • std::iterator_traits<It> 具有成員 typedef value_type (C++20 之前)difference_typereferencepointeriterator_category,並且
  • 給定 r,一個型別為 It 的左值,以下表達式必須是有效的並具有其指定的效果
表示式 返回型別 前置條件
*r 未指定 r可解引用
++r It& r可遞增的(表示式 ++r 的行為已定義)

概念

對於 std::iterator_traits 的定義,定義了以下僅用於說明的概念。

template<class I>

concept __LegacyIterator =
    requires(I i)
    {
        {   *i } -> __Referenceable;
        {  ++i } -> std::same_as<I&>;
        { *i++ } -> __Referenceable;

    } && std::copyable<I>;

其中,僅當 T& 是有效型別(特別是 T 不能是 void)時,內部概念 __Referenceable<T> 才滿足。

(C++20 起)

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 2437 C++98 要求 *rreference 對輸出迭代器不要求
LWG 3420 C++20 內部概念首先檢查 copyable 只有當 requires 表示式為真時才檢查 copyable

[編輯] 參閱

指定型別物件可以被增量和解引用
(概念) [編輯]
迭代器庫 為迭代器、迭代器特性、介面卡和實用函式提供定義