std::ranges::iota_view<W, Bound>:: iota_view
From cppreference.net
|
iota_view
(
)
requires
std::
default_initializable
<
W
>
=
default
;
|
(1) | (depuis C++20) |
|
constexpr
explicit
iota_view
(
W value
)
;
|
(2) | (depuis C++20) |
|
constexpr
explicit
iota_view
(
std::
type_identity_t
<
W
>
value,
std:: type_identity_t < Bound > bound ) ; |
(3) | (depuis C++20) |
|
constexpr
explicit
iota_view
(
/*iterator*/
first,
/* voir ci-dessous */
last
)
;
|
(4) | (depuis C++20) |
Construit un
iota_view
.
| Surcharge | Membres de données | |
|---|---|---|
value_
|
bound_
|
|
| (1) | Initialisé par valeur | Initialisé par valeur |
| (2) | initialisé avec value | |
| (3) | initialisé avec bound | |
| (4) |
initialisé avec
first.
value_
|
voir ci-dessous |
2,3)
Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
-
Bound
(
)
n'est pas accessible depuis
value
, sauf si
Bounddésigne std::unreachable_sentinel_t . -
WetBoundmodélisenttotally_ordered_with, et bool ( value <= bound ) est false .
4)
Si l'une des conditions suivantes est satisfaite, le comportement est indéfini :
-
Bound
(
)
est inaccessible depuis
value
, sauf si
Bounddésigne std::unreachable_sentinel_t . -
WetBoundmodélisenttotally_ordered_with, et bool ( first.value_<= bound ) est false .
Le type de
last
et la méthode d'initialisation de
bound_
sont déterminés par le type que
Bound
désigne :
Le type
Bound
désigne
|
Le type de last |
bound_
|
|---|---|---|
W
|
iterator
|
initialisé avec
last.
value_
|
| std::unreachable_sentinel_t |
Bound
|
initialisé avec last |
| tout autre type |
sentinel
|
initialisé avec
last.
bound_
|
Paramètres
| value | - | la valeur de départ |
| bound | - | la limite |
| first | - | l'itérateur indiquant la valeur de départ |
| last | - | l'itérateur ou sentinelle indiquant la limite |
Exemple
Exécuter ce code
#include <cassert> #include <iostream> #include <iterator> #include <ranges> int main() { const auto l = {1, 2, 3, 4}; auto i1 = std::ranges::iota_view<int, int>(); // surcharge (1) assert(i1.empty() and i1.size() == 0); auto i2 = std::ranges::iota_view(1); // surcharge (2) assert(not i2.empty() and i2.front() == 1); for (std::cout << "1) "; auto e : i2 | std::views::take(3)) std::cout << e << ' '; std::cout << '\n'; auto i3 = std::ranges::iota_view(std::begin(l)); // surcharge (2) assert(not i3.empty() and i3.front() == l.begin()); for (std::cout << "2) "; auto e : i3 | std::views::take(4)) std::cout << *e << ' '; std::cout << '\n'; auto i4 = std::ranges::iota_view(1, 8); // surcharge (3) assert(not i4.empty() and i4.front() == 1 and i4.back() == 7); for (std::cout << "3) "; auto e : i4) std::cout << e << ' '; std::cout << '\n'; auto i5 = std::ranges::iota_view(l.begin(), l.end()); // surcharge (4) for (std::cout << "4) "; auto e : i5) std::cout << *e << ' '; std::cout << '\n'; auto i6 = std::ranges::iota_view(l.begin(), std::unreachable_sentinel); // (4) for (std::cout << "5) "; auto e : i6 | std::views::take(3)) std::cout << *e << ' '; std::cout << '\n'; }
Sortie :
1) 1 2 3 2) 1 2 3 4 3) 1 2 3 4 5 6 7 4) 1 2 3 4 5) 1 2 3
Rapports de défauts
Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.
| DR | Appliqué à | Comportement publié | Comportement corrigé |
|---|---|---|---|
| LWG 3523 | C++20 | la surcharge (4) pouvait utiliser un type de sentinelle incorrect | corrigé |
| P2711R1 | C++20 | les surcharges (3,4) n'étaient pas explicites | rendues explicites |