std::ranges::views::take, std::ranges::take_view
| Definiert in Header <ranges>
|
||
template< ranges::view V >
class take_view
: public ranges::view_interface<take_view<V>>
|
(1) | (seit C++20) |
namespace views {
inline constexpr /* unspecified */ take = /* unspecified */;
}
|
(2) | (seit C++20) |
| Aufrufsignatur |
||
template< ranges::viewable_range R >
requires /* see below */
constexpr ranges::view auto
take( R&& r, ranges::range_difference_t<R> count );
|
(seit C++20) | |
template< class DifferenceType >
constexpr /* range adaptor closure */ take( DifferenceType&& count );
|
(seit C++20) | |
views::take ist ein RangeAdaptorObject. Der Ausdruck views::take(e, f) ergibt eine View, die die ersten f Elemente aus e darstellt. Das Ergebnis ist nicht notwendigerweise eine take_view.
views::take(e, f) ist ausdrucksäquivalent zu (wobei T ist std::remove_cvref_t<decltype((e))> und D ist ranges::range_difference_t<decltype((e))>):
((void)f,decay-copy(e)), wennTeineranges::empty_viewist, außer dass die Auswertungen voneundfunbestimmt sequenziert sind;U(ranges::begin(e), ranges::begin(e) + std::min<D>(ranges::distance(e), f)), wennTeine Spezialisierung von std::span, std::basic_string_view oder ranges::subrange ist, die sowohl random_access_range als auch sized_range modelliert, wobeiUist
std::span<typename T::element_type>, wennTeine Spezialisierung von std::span ist;T, wennTeine Spezialisierung von std::basic_string_view ist;ranges::subrange<ranges::iterator_t<T>>, wennTeine Spezialisierung von ranges::subrange ist;
ranges::iota_view(*ranges::begin(e),*(ranges::begin(e) + std::min<D>(ranges::distance(e), f))), wennTeine Spezialisierung von ranges::iota_view ist, die sowohl random_access_range als auch sized_range modelliert;
|
(seit C++23) |
- andernfalls,
take_view(e, f).
decltype((f)) std::convertible_to<D> modellieren.take_view modelliert die Konzepte contiguous_range, random_access_range, bidirectional_range, forward_range, input_range und sized_range, wenn die zugrundeliegende View V die jeweiligen Konzepte modelliert. Sie modelliert common_range, wenn die zugrundeliegende View V sowohl random_access_range als auch sized_range modelliert.
Datenmitglieder
| Member | Beschreibung |
V
base_
|
die zugrundeliegende Ansicht
( Nur-Darstellungs-Memberobjekt* ) |
ranges::
range_difference_t
<
V
>
count_
|
die Anzahl der zu nehmenden Elemente
( Nur-Darstellungs-Memberobjekt* ) |
Memberfunktionen
konstruiert einen
take_view
(öffentliche Elementfunktion) |
|
|
gibt eine Kopie der zugrundeliegenden (adaptierten) Ansicht zurück
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator zum Anfang zurück
(öffentliche Elementfunktion) |
|
|
gibt einen Iterator oder Sentinel zum Ende zurück
(öffentliche Elementfunktion) |
|
gibt die Anzahl der Elemente zurück, bereitgestellt nur wenn der zugrundeliegende (adaptierte) Bereich
sized_range
erfüllt
(öffentliche Elementfunktion) |
|
|
(C++26)
|
gibt die ungefähre Größe des resultierenden
approximately_sized_range
zurück
(öffentliche Elementfunktion) |
Geerbt von ranges::view_interface | |
| gibt zurück, ob die abgeleitete Ansicht leer ist, nur verfügbar, wenn sie sized_range oder forward_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
(C++23) |
gibt einen konstanten Iterator zum Anfang des Bereichs zurück (öffentliche Elementfunktion von std::ranges::view_interface<D>)
|
(C++23) |
gibt einen Sentinel für den konstanten Iterator des Bereichs zurück (öffentliche Elementfunktion von std::ranges::view_interface<D>)
|
| gibt zurück, ob die abgeleitete Ansicht nicht leer ist, nur verfügbar, wenn ranges::empty auf sie anwendbar ist (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
| ermittelt die Adresse der Daten der abgeleiteten Ansicht, nur verfügbar, wenn ihr Iteratortyp contiguous_iterator erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
| gibt das erste Element in der abgeleiteten Ansicht zurück, verfügbar, wenn sie forward_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
| gibt das letzte Element in der abgeleiteten Ansicht zurück, nur verfügbar, wenn sie bidirectional_range und common_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
gibt das nte Element in der abgeleiteten Ansicht zurück, nur verfügbar, wenn sie random_access_range erfüllt (öffentliche Elementfunktion von std::ranges::view_interface<D>)
| |
Deduktionshilfen
Geschachtelte Klassen
|
(C++20)
|
der Sentinel-Typ
( Nur zur Darstellung verwendete Member-Klassenvorlage* ) |
Hilfsvorlagen
|
template
<
class
T
>
constexpr
bool
enable_borrowed_range
<
std
::
ranges
::
take_view
<
T
>>
=
|
(seit C++20) | |
Diese Spezialisierung von
ranges::enable_borrowed_range
bewirkt, dass
take_view
borrowed_range
erfüllt, wenn die zugrundeliegende View diese Bedingung erfüllt.
Beispiel
#include <algorithm> #include <iostream> #include <ranges> int main() { namespace views = std::views; auto print = [](char x){ std::cout << x; }; for (const char nums[]{'1', '2', '3'}; int n : views::iota(0, 5)) { std::cout << "take(" << n << "): "; // safely takes only upto min(n, nums.size()) elements: std::ranges::for_each(nums | views::take(n), print); std::cout << '\n'; } }
Ausgabe:
take(0): take(1): 1 take(2): 12 take(3): 123 take(4): 123
Fehlerberichte
Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | Angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 3407 | C++20 |
views::take
konnte manchmal keinen
sized random access range konstruieren |
Der Ergebnistyp wird angepasst, sodass
die Konstruktion immer gültig ist |
| LWG 3494 | C++20 |
take_view
war niemals ein
borrowed_range
|
Es ist ein
borrowed_range
wenn der zugrundeliegende View es ist
|
Siehe auch
|
(C++20)
|
erstellt einen Subrange aus einem Iterator und einer Anzahl
(Anpassungspunktobjekt) |
eine
view
, bestehend aus den Anfangselementen einer anderen
view
, bis zum ersten Element, bei dem ein Prädikat
false
zurückgibt
(Klassentemplate) (Range-Adapterobjekt) |
|
|
(C++20)
|
kopiert eine Anzahl von Elementen an einen neuen Speicherort
(Algorithmus-Funktionsobjekt) |