std::ranges::owning_view
| Definiert in der Header-Datei <ranges> |
||
| template< ranges::range R > erfordert std::movable<R> && (!/*is-initializer-list*/<R>) |
(seit C++20) | |
owning_view ist eine view, die das alleinige Eigentum an einem range besitzt. Sie ist nur verschiebbar und speichert diesen range darin.
Der konstante Ausdruck /*is-initializer-list*/<R> in der Er-Klausel ist true genau dann, wenn std::remove_cvref_t<R> eine Spezialisierung von std::initializer_list ist.
[edit] Datenelemente
| Member-Name | Definition |
r_ (private) |
Der zugrundeliegende Range vom Typ R.((exposition-only member object*) |
[edit] Memberfunktionen
konstruiert eine owning_view durch Wertinitialisierung oder Verschiebekonstruktion des gespeicherten Ranges(öffentliche Memberfunktion) | |
| verschiebt den gespeicherten Range (öffentliche Memberfunktion) | |
| gibt eine Referenz auf den gespeicherten Range zurück (öffentliche Memberfunktion) | |
| gibt den Anfangs-Iterator des gespeicherten Ranges zurück (öffentliche Memberfunktion) | |
| gibt das Sentinel des gespeicherten Ranges zurück (öffentliche Memberfunktion) | |
| prüft, ob der gespeicherte Range leer ist (öffentliche Memberfunktion) | |
gibt die Größe des gespeicherten sized_range zurück(öffentliche Memberfunktion) | |
gibt den Zeiger auf den Anfang des gespeicherten contiguous_range zurück(öffentliche Memberfunktion) | |
Geerbt von std::ranges::view_interface | |
| (C++23) |
gibt einen konstanten Iterator zum Anfang des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| (C++23) |
gibt ein Sentinel für den konstanten Iterator des Bereichs zurück (public member function of std::ranges::view_interface<D>) |
| gibt zurück, ob die abgeleitete Ansicht nicht leer ist, bereitgestellt nur, wenn ranges::empty darauf anwendbar ist (public member function of std::ranges::view_interface<D>) | |
gibt das erste Element in der abgeleiteten View zurück, bereitgestellt, wenn sie forward_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
gibt das letzte Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie bidirectional_range und common_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
gibt das n-te Element in der abgeleiteten View zurück, nur bereitgestellt, wenn sie random_access_range erfüllt(öffentliche Member-Funktion von std::ranges::view_interface<D>) | |
std::ranges::owning_view::owning_view
| owning_view() erfordert std::default_initializable<R> = default; |
(1) | (seit C++20) |
| owning_view( owning_view&& other ) = default; |
(2) | (seit C++20) |
| constexpr owning_view( R&& t ); |
(3) | (seit C++20) |
| owning_view( const owning_view& ) = delete; |
(4) | (seit C++20) |
owning_view ist nur verschiebbar.Parameter
| Sonstiges | - | eine weitere owning_view zum Verschieben aus |
| t | - | Range zum Verschieben aus |
std::ranges::owning_view::operator=
| owning_view& operator=( owning_view&& other ) = default; |
(1) | (seit C++20) |
| owning_view& operator=( const owning_view& ) = delete; |
(2) | (seit C++20) |
owning_view ist nur verschiebbar.Parameter
| Sonstiges | - | eine weitere owning_view zum Verschieben aus |
Rückgabewert
*this
std::ranges::owning_view::base
| constexpr R& base() & noexcept; |
(1) | (seit C++20) |
| constexpr const R& base() const & noexcept; |
(2) | (seit C++20) |
| constexpr R&& base() && noexcept; |
(3) | (seit C++20) |
| constexpr const R&& base() const && noexcept; |
(4) | (seit C++20) |
Gibt eine Referenz auf den gespeicherten Range zurück, wobei die Wertkategorie und die const-Qualifikation beibehalten werden.
std::ranges::owning_view::begin
| constexpr ranges::iterator_t<R> begin(); |
(1) | (seit C++20) |
| constexpr auto begin() const requires ranges::range<const R>; |
(2) | (seit C++20) |
Entspricht return ranges::begin(r_);.
std::ranges::owning_view::end
| constexpr ranges::sentinel_t<R> end(); |
(1) | (seit C++20) |
| constexpr auto end() const requires ranges::range<const R>; |
(2) | (seit C++20) |
Entspricht return ranges::end(r_);.
std::ranges::owning_view::empty
| constexpr bool empty() requires requires { ranges::empty(r_); }; |
(1) | (seit C++20) |
| constexpr bool empty() const requires requires { ranges::empty(r_); }; |
(2) | (seit C++20) |
Entspricht return ranges::empty(r_);.
std::ranges::owning_view::size
| constexpr auto size() requires ranges::sized_range<R>; |
(1) | (seit C++20) |
| constexpr auto size() const requires ranges::sized_range<const R>; |
(2) | (seit C++20) |
Entspricht return ranges::size(r_);.
std::ranges::owning_view::data
| constexpr auto data() requires ranges::contiguous_range<R>; |
(1) | (seit C++20) |
| constexpr auto data() const requires ranges::contiguous_range<const R>; |
(2) | (seit C++20) |
Entspricht return ranges::data(r_);.
[edit] Hilfsschablonen
| template< class T > constexpr bool enable_borrowed_range<std::ranges::owning_view<T>> = |
(seit C++20) | |
Diese Spezialisierung von ranges::enable_borrowed_range lässt owning_view borrowed_range erfüllen, wenn der zugrundeliegende Range dies tut.
[edit] Beispiel
#include <cassert> #include <iostream> #include <ranges> #include <string> int main() { using namespace std::literals; std::ranges::owning_view ov{"cosmos"s}; // the deduced type of R is std::string; // `ov` is the only owner of this string assert( ov.empty() == false && ov.size() == 6 && ov.size() == ov.base().size() && ov.front() == 'c' && ov.front() == *ov.begin() && ov.back() == 's' && ov.back() == *(ov.end() - 1) && ov.data() == ov.base() ); std::cout << "sizeof(ov): " << sizeof ov << '\n' // typically equal to sizeof(R) << "range-for: "; for (const char ch : ov) std::cout << ch; std::cout << '\n'; std::ranges::owning_view<std::string> ov2; assert(ov2.empty()); // ov2 = ov; // compile-time error: copy assignment operator is deleted ov2 = std::move(ov); // OK assert(ov2.size() == 6); }
Mögliche Ausgabe
sizeof(ov): 32 range-for: cosmos
[edit] Siehe auch
| (C++20) |
ein view der Elemente eines anderen range(Klassen-Template) |
| (C++20) |
ein view, der alle Elemente eines range enthält(Alias-Template) (Range-Adaptor-Objekt) |