empty_view
クラス (C++ 標準ライブラリ)
要素のないビュー。 このビューは、ビューで提供する必要があるが、基になるデータにアクセスする必要がないコードを呼び出すなどのテスト目的で役立ちます。
構文
template<class T>
requires std::is_object_v<T>
class empty_view : public ranges::view_interface<empty_view<T>>;
テンプレート パラメーター
T
要素の型。 empty_view
に要素がない場合でも、すべての範囲は同種です。 つまり、特定の型の要素があります。 したがって、empty_view
に要素がない場合でも、int
のempty_view
やstrings
などの型がまだ存在します。
特性の表示
以下の項目の説明については、 View クラスの特性を参照してください。
特徴 | 説明 |
---|---|
範囲アダプター | views::empty |
基になる範囲 | なし |
要素の種類 | empty_view の作成時に指定したとおり |
反復子カテゴリの表示 | contiguous_range |
サイズ | はい。 常に 0 を返します |
const 対応 |
はい |
共通範囲 | はい |
借用範囲 | はい |
メンバー
メンバー関数 | 説明 |
---|---|
コンストラクターC++20 | empty_view を構築します。 |
begin C++20 |
nullptr を返します。 |
end C++20 |
nullptr を返します。 |
size C++20 |
0 を返します。 |
継承の対象 view_interface |
説明 |
back C++20 |
未定義の動作になります。 |
data C++20 |
nullptr を返します。 |
empty C++20 |
true を返します。 |
front C++20 |
未定義の動作になります。 |
operator[] C++20 |
未定義の動作になります。 |
operator bool C++20 |
false を返します。 |
解説
empty_view
を作成する最善の方法は、empty
範囲アダプターを使用することです。 範囲アダプターは、ビュー クラスを作成するための目的の方法です。 独自のカスタム ビューの種類を作成する場合は、ビューの種類が公開されます。
empty_view
には要素を含めないため、特定のコンパイラの最適化が可能です。 たとえば、繰り返し処理するものが何もないことを認識しているため、コンパイラは for (auto e : std::views::empty<int>) {...}
を排除します。
empty_view
のもう 1 つの用途は、split_view
をempty_view
区切り記号で分割することです。その結果、1 つの要素範囲の範囲になります。
要件
Header: <ranges>
(C++20 以降)
名前空間: std::ranges
コンパイラ オプション: /std:c++20
以降が必要です。
コンストラクター
empty_view
のインスタンスを作成します。
template<class T>
inline constexpr empty_view<T> empty{};
パラメーター
T
基になる要素の型。いずれも存在しません。
解説
empty_view
を作成する最善の方法は、empty
範囲アダプターを使用することです。
例 empty_view
// requires /std:c++20 or higher
#include <ranges>
#include <iostream>
int main()
{
auto anEmptyView = std::views::empty<int>;
bool isNotEmpty = (bool)anEmptyView;
std::cout << std::boolalpha << isNotEmpty << "\n"; // false
std::cout << std::boolalpha << anEmptyView.empty(); // true
}
false
true
back
未定義の動作になります。
constexpr auto back()
requires ranges::bidirectional_range<T> && ranges::common_range<T>;
constexpr auto back() const
requires ranges::bidirectional_range<const T> && ranges::common_range<const T>;
パラメーター
ありません。
戻り値
ありません。
解説
デバッグ ビルドでこの関数を呼び出すと、空の view_interface
で関数が呼び出されたというアサーションが生成されます。
begin
ビューに最初の要素がないため、 nullptr
を返します。
static constexpr T* begin() noexcept
戻り値
nullptr
data
ポインターを取得するビューの最初の要素がないため、 nullptr
を返します。
static constexpr T* data() noexcept
戻り値
nullptr
.
empty
派生ビューが空かどうかをテストします。
static constexpr bool empty() noexcept
パラメーター
ありません。
戻り値
true
を返します。
end
ビューに要素がないため、 nullptr
を返します。
static constexpr T* end() noexcept
戻り値
nullptr
.
front
未定義の動作になります。
constexpr auto front()
requires ranges::forward_range<T>;
constexpr auto front() const
requires ranges::forward_range<const T>;
パラメーター
ありません。
戻り値
ありません。
解説
デバッグ ビルドでこの関数を呼び出すと、空の view_interface
で関数が呼び出されたというアサーションが生成されます。
operator[]
未定義の動作になります。
template<ranges::random_access_range R = T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos);
template<ranges::random_access_range R = const T>
constexpr decltype(auto) operator[](ranges::range_difference_t<R> pos) const;
パラメーター
pos
返される要素の開始反復子を基準とした位置。
戻り値
ありません。
解説
デバッグ ビルドでこの関数を呼び出すと、インデックスが view_interface
の範囲外であるというアサーションが発生します。
operator bool
派生ビューが空でないかどうかをテストします。
constexpr explicit operator bool()
requires requires { ranges::empty(T ()); };
constexpr explicit operator bool() const
requires requires { ranges::empty(T ()); };
パラメーター
ありません。
戻り値
false
を返します。
例 (bool)
// requires /std:c++20 or higher
#include <ranges>
#include <iostream>
int main()
{
auto anEmptyView = std::views::empty<int>;
if (anEmptyView) // check if anEmptyView isn't empty
{
std::cout << "Error: why does an empty_view have elements?\n";
}
else
{
std::cout << "Correct: an empty_view is not not empty\n";
}
}
Correct: an empty_view is not not empty
size
ビュー内の要素の数を取得します。これは常に 0 になります。
static constexpr size_t size()
パラメーター
ありません。
戻り値
0
.