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
衍生自這個基類之類別的類型。
成員
成員函式 | 說明 |
---|---|
back C++20 |
取得衍生檢視中的最後一個專案。 |
data C++20 |
取得衍生檢視中第一個專案的指標。 |
empty C++20 |
測試衍生檢視是否為空白。 |
front C++20 |
取得衍生檢視中的第一個專案。 |
size C++20 |
取得衍生檢視中的項目數目。 |
運算子 | 說明 |
operator[] C++20 |
取得位於指定位置的專案。 |
operator bool C++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_range
和 common_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()
檢視類別