std::ranges:: sized_range, std::ranges:: disable_sized_range
|
Definiert im Header
<ranges>
|
||
| (1) | ||
|
template
<
class
T
>
concept sized_range
=
ranges::
range
<
T
>
&&
|
(seit C++20)
(bis C++26) |
|
|
template
<
class
T
>
concept sized_range
=
ranges
::
approximately_sized_range
<
T
>
&&
|
(seit C++26) | |
|
template
<
class
>
constexpr bool disable_sized_range = false ; |
(2) | (seit C++20) |
sized_range
Konzept spezifiziert die Anforderungen eines
range
(bis C++26)
approximately_sized_range
(seit C++26)
Typs, der seine Größe in konstanter Zeit mit der
size
Funktion kennt.
disable_sized_range
existiert, um die Verwendung von Bereichstypen zu ermöglichen, die eine
size
-Funktion bereitstellen (entweder als Member oder als Nicht-Member), aber tatsächlich kein
sized_range
modellieren. Benutzer können
disable_sized_range
für cv-unqualifizierte programmdefinierte Typen spezialisieren. Solche Spezialisierungen müssen in
konstanten Ausdrücken
verwendbar sein und den Typ
const
bool
haben.
Inhaltsverzeichnis |
Semantische Anforderungen
T
modelliert
sized_range
nur wenn
- ranges:: size ( t )
-
- amortisierte konstante Zeitkomplexität besitzt,
- den Wert von t nicht in einer für gleichheitserhaltende Ausdrücke beobachtbaren Weise verändert, und
- gleich ranges:: distance ( ranges:: begin ( t ) , ranges:: end ( t ) ) ist, und
-
wenn
ranges::
iterator_t
<
T
>
forward_iteratormodelliert, ranges:: size ( t ) unabhängig von der Auswertung von ranges:: begin ( t ) wohldefiniert ist (mit anderen Worten: Ein Single-Pass Sized Range könnte size nur vor dem ersten Aufruf von begin unterstützen, aber ein Forward Range muss size zu jeder Zeit unterstützen).
Hinweise
disable_sized_range
kann nicht verwendet werden, um einen Bereich abzuwählen, dessen Iterator und Sentinel
sized_sentinel_for
erfüllen;
std::disable_sized_sentinel_for
muss stattdessen verwendet werden.
disable_sized_range
kann nicht für Array-Typen oder Referenztypen spezialisiert werden.
| Feature-Test Makro | Wert | Std | Feature |
|---|---|---|---|
__cpp_lib_ranges_reserve_hint
|
202502L
|
(C++26) | ranges::approximately_sized_range und ranges::reserve_hint |
Beispiel
#include <forward_list> #include <list> #include <ranges> static_assert ( std::ranges::sized_range<std::list<int>> and not std::ranges::sized_range<std::forward_list<int>> ); int main() {}
Siehe auch
|
(C++20)
|
spezifiziert einen Bereich, dessen Iteratortyp
random_access_iterator
erfüllt
(Konzept) |
|
(C++20)
|
spezifiziert einen Bereich, dessen Iteratortyp
contiguous_iterator
erfüllt
(Konzept) |