共用方式為


view_interface class (C++標準連結庫)

命名空間中檢視類別的基類std::ranges 這個類別會實作衍生檢視類型的一些介面。 使用此做為您自己的檢視類型的基類,以減少您需要撰寫的重複使用專案。

語法

template<class Derived>
  requires std::is_class_v<Derived> && 
  std::same_as<Derived, std::remove_cv_t<Derived>>
class view_interface;

範本參數

Derived
衍生自這個基類之類別的類型。

成員

成員函式 說明
backC++20 取得衍生檢視中的最後一個專案。
dataC++20 取得衍生檢視中第一個專案的指標。
emptyC++20 測試衍生檢視是否為空白。
frontC++20 取得衍生檢視中的第一個專案。
sizeC++20 取得衍生檢視中的項目數目。
運算子 說明
operator[]C++20 取得位於指定位置的專案。
operator boolC++20 測試衍生檢視是否不是空的。

需求

標頭: <ranges> (自C++20起)

命名空間std::ranges

需要編譯程式選項:/std:c++20或更新版本。

back

取得衍生檢視中的最後一個專案。

constexpr auto back()
    requires ranges::bidirectional_range<Derived> &&
    ranges::common_range<Derived>;

constexpr auto back() const
    requires ranges::bidirectional_range<const Derived> && 
    ranges::common_range<const Derived>;

參數

無。

傳回值

衍生檢視中的最後一個專案。

備註

衍生檢視必須滿足 bidirectional_rangecommon_range
front() 的行為back()未針對任何空白檢視定義。

data

取得衍生檢視中第一個專案的指標。

constexpr auto data()
    requires std::contiguous_iterator<ranges::iterator_t<Derived>>;
constexpr auto data() const
    requires ranges::range<const Derived> &&
    std::contiguous_iterator<ranges::iterator_t<const Derived>>;

參數

無。

傳回值

衍生檢視中第一個專案的指標。

備註

衍生檢視的反覆運算器必須滿足 contiguous_iterator

empty

測試衍生檢視是否為空白。

1) constexpr bool empty() requires ranges::forward_range<Derived>;
2) constexpr bool empty() const requires ranges::forward_range<const Derived>;

參數

無。

傳回值

如果衍生檢視沒有專案,則傳 true 回 。 否則傳回 false

備註

衍生檢視必須滿足 std::ranges::forward_range

front

取得衍生檢視中的第一個專案。

constexpr auto front()
    requires ranges::forward_range<Derived>;
constexpr auto front() const
    requires ranges::forward_range<const Derived>;

參數

無。

傳回值

衍生檢視中的最後一個專案。

備註

衍生檢視必須滿足 forward_range
的行為 front()std::ranges::empty_view未定義。

size

取得衍生檢視中的項目數目。

constexpr auto size() requires ranges::forward_range<Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<Derived>,
    ranges::iterator_t<Derived>>;
constexpr auto size() const requires ranges::forward_range<const Derived> &&
    std::sized_sentinel_for<ranges::sentinel_t<const Derived>,
    ranges::iterator_t<const Derived>>;

參數

無。

傳回值

衍生檢視中的項目數目。

備註

衍生檢視的反覆運算器必須滿足 sized_sentinel_for

operator[]

取得位於指定位置的專案。

template<ranges::random_access_range R = Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);

template<ranges::random_access_range R = const Derived>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;

參數

pos
相對於要傳回之專案之開頭反覆運算器的位置。

傳回值

相對於起始反覆運算器之指定位置的專案。

備註

衍生檢視必須滿足 random_access_range
這個運算子的行為未定義。std::ranges::empty_view

範例: operator[]

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::drop_view dv = std::views::drop(v, 2);

    for (auto e : dv)
    {
        std::cout << e << ' '; // 3 4 5
    }

    std::cout << "\ndv[1] = " << dv[1];
}
3 4 5
dv[1] = 4

view_interface::operator bool

測試衍生檢視是否不是空的。

explicit constexpr operator bool();
explicit constexpr operator bool() const;

參數

無。

傳回值

如果衍生的檢視沒有專案,則傳 false 回 (檢視是空的)。 否則,會傳 true 回 (檢視不是空的)。

備註

衍生檢視的反覆運算器必須滿足 std::ranges::forward_iterator
這個運算子相當於 !empty()。 這可讓您輕鬆地撰寫 if (someRange) {...} 來測試範圍中是否有要操作的專案。
這個運算子的行為未定義。std::ranges::empty_view

範例: operator bool

// requires /std:c++20 or later
#include <ranges>
#include <iostream>
#include <vector>

int main()
{
    std::vector<int> v{1, 2, 3, 4, 5};
    std::ranges::filter_view fv = std::views::filter(v, [](int e) { return e > 3; });

    bool isNotEmpty = static_cast<bool>(fv);
    std::cout << "Has elements greater than 3: " << std::boolalpha << isNotEmpty << '\n' >>;
}
Has elements greater than 3: true

另請參閱

<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
檢視類別