Aracılığıyla paylaş


view_interface class (C++ Standart Kitaplığı)

Ad alanında görünüm sınıfları için temel sınıfstd::ranges. Bu sınıf türetilmiş görünüm türleri için bazı arabirimler uygular. Yazmanız gereken ortak değeri azaltmak için bunu kendi görünüm türleriniz için temel sınıf olarak kullanın.

Sözdizimi

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

Şablon parametreleri

Derived
Bu temel sınıftan türetilen sınıfın türü.

Üyeler

Üye işlevleri Açıklama
backC++20 Türetilmiş görünümdeki son öğeyi alın.
dataC++20 Türetilmiş görünümdeki ilk öğeye bir işaretçi alın.
emptyC++20 Türetilmiş görünümün boş olup olmadığını test edin.
frontC++20 Türetilmiş görünümdeki ilk öğeyi alın.
sizeC++20 Türetilmiş görünümdeki öğe sayısını alın.
İşleçler Açıklama
operator[]C++20 Öğesini belirtilen konumda alın.
operator boolC++20 Türetilmiş görünümün boş olup olmadığını test edin.

Gereksinimler

Üst bilgi: <ranges> (C++20'den beri)

Ad alanı: std::ranges

Derleyici Seçeneği: /std:c++20 veya üzeri gereklidir.

back

Türetilmiş görünümdeki son öğeyi alın.

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>;

Parametreler

Hiçbiri.

Dönüş değeri

Türetilmiş görünümdeki son öğe.

Açıklamalar

Türetilmiş görünüm ve common_range'yi karşılamalıdırbidirectional_range.
ve'in back() front() davranışı, herhangi bir boş görünüm için tanımlanmamıştır.

data

Türetilmiş görünümdeki ilk öğeye bir işaretçi alın.

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>>;

Parametreler

Hiçbiri.

Dönüş değeri

Türetilmiş görünümdeki ilk öğeye ilişkin bir işaretçi.

Açıklamalar

Türetilmiş görünümün yineleyicisinin karşılaması contiguous_iteratorgerekir.

empty

Türetilmiş görünümün boş olup olmadığını test edin.

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

Parametreler

Hiçbiri.

Dönüş değeri

Türetilen görünümde öğe yoksa döndürür true . Aksi takdirde döndürür false.

Açıklamalar

Türetilmiş görünüm karşılamalıdır std::ranges::forward_range.

front

Türetilmiş görünümdeki ilk öğeyi alın.

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

Parametreler

Hiçbiri.

Dönüş değeri

Türetilmiş görünümdeki son öğe.

Açıklamalar

Türetilmiş görünüm karşılamalıdır forward_range.
'nin front() davranışı için std::ranges::empty_viewtanımlanmamıştır.

size

Türetilmiş görünümdeki öğe sayısını alın.

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>>;

Parametreler

Hiçbiri.

Dönüş değeri

Türetilmiş görünümdeki öğelerin sayısı.

Açıklamalar

Türetilmiş görünümün yineleyicisinin karşılaması sized_sentinel_forgerekir.

operator[]

Öğesini belirtilen konumda alın.

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;

Parametreler

pos
Döndürülecek öğenin başlangıç yineleyicisine göre konumu.

Dönüş değeri

Başlangıç yineleyicisine göre belirtilen konumdaki öğesi.

Açıklamalar

Türetilmiş görünüm karşılamalıdır random_access_range.
Bu işlecin davranışı için std::ranges::empty_viewtanımlanmamıştır.

Örnek: 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

Türetilmiş görünümün boş olup olmadığını test edin.

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

Parametreler

Hiçbiri.

Dönüş değeri

Türetilmiş görünümde öğe yoksa (görünüm boşsa) döndürür false . Aksi takdirde, döndürür true (görünüm boş değildir).

Açıklamalar

Türetilmiş görünümün yineleyicisinin karşılaması std::ranges::forward_iteratorgerekir.
Bu işleç ile !empty()eşdeğerdir. Bu, aralıkta üzerinde çalışacak bir şey olup olmadığını test etmek için yazmanın if (someRange) {...} kullanışlı olmasını sağlar.
Bu işlecin davranışı için std::ranges::empty_viewtanımlanmamıştır.

Örnek: 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

Ayrıca bkz.

<ranges>
ranges::begin()
ranges::data()
ranges::end()
ranges::empty()
ranges::size()
Sınıfları görüntüleme