名前空間
変種
操作

std::counted_iterator<I>::base

From cppreference.com
 
 
イテレータライブラリ
イテレータのコンセプト
イテレータのプリミティブ
アルゴリズムのコンセプトとユーティリティ
間接呼び出し可能コンセプト
共通アルゴリズム要件
(C++20)
(C++20)
(C++20)
ユーティリティ
(C++20)
イテレータアダプタ
Rangeアクセス
(C++11)(C++14)
(C++14)(C++14)  
(C++11)(C++14)
(C++14)(C++14)  
(C++17)(C++20)
(C++17)
(C++17)
 
 
constexpr const I& base() const& noexcept;
(1) (C++20以降)
constexpr I base() &&;
(2) (C++20以降)

基底イテレータを返します。

1) 基底イテレータへの参照を返します。
2) 基底イテレータから戻り値をムーブ構築します。

目次

[編集] パラメータ

(なし)

[編集] 戻り値

1) 基底イテレータへの参照。
2) 基底イテレータからムーブ構築されたイテレータ。

[編集] 例外

実装定義の例外をスローする場合があります。

[編集]

#include <algorithm>
#include <iostream>
#include <iterator>
#include <type_traits>
#include <vector>
 
int main()
{
    std::vector<int> v{0, 1, 2, 3, 4};
 
    std::reverse_iterator<std::vector<int>::iterator> reverse{v.rbegin()};
 
    std::counted_iterator counted{reverse, 3};
 
    static_assert(std::is_same<
        decltype(counted.base()),
        std::reverse_iterator<std::vector<int>::iterator> const&
    >{});
 
    std::cout << "Print with reverse_iterator: ";
    for (auto r = counted.base(); r != v.rend(); ++r)
        std::cout << *r << ' ';
    std::cout << '\n';
 
    std::cout << "Print with counted_iterator: ";
    for (; counted != std::default_sentinel; ++counted)
        std::cout << counted[0] << ' ';
    std::cout << '\n';
}

出力

Print with reverse_iterator: 4 3 2 1 0
Print with counted_iterator: 4 3 2

[編集] 不具合報告

以下の動作変更を伴う欠陥報告が、以前に公開されたC++標準に遡って適用されました。

DR 適用対象 公開された動作 正しい動作
LWG 3391 C++20 base の const 版は基底イテレータのコピーを返します。 参照を返します。
LWG 3593 C++20 base の const 版は参照を返しますが、noexcept ではない可能性があります。 noexcept に変更されました

[編集] 関連項目

指し示す要素にアクセスする
(public member function) [編集]
終端までの距離を返します。
(public member function) [編集]
English 日本語 中文(简体) 中文(繁體)