24
Ranges library
[ranges]
24.7
Range adaptors
[range.adaptors]
24.7.1
General
[range.adaptors.general]
1
#
Subclause
[range.
adaptors]
defines
range adaptors
, which are utilities that transform a
range
into a
view
with custom behaviors
.
These adaptors can be chained to create pipelines of range transformations that evaluate lazily as the resulting view is iterated
.
2
#
Range adaptors are declared in namespace
std
::
ranges
::
views
.
3
#
The bitwise OR operator is overloaded for the purpose of creating adaptor chain pipelines
.
The adaptors also support function call syntax with equivalent semantics
.
4
#
[
Example
1
:
vector
<
int
>
ints
{
0
,
1
,
2
,
3
,
4
,
5
}
;
auto
even
=
[
]
(
int
i
)
{
return
0
=
=
i
%
2
;
}
;
auto
square
=
[
]
(
int
i
)
{
return
i
*
i;
}
;
for
(
int
i
:
ints
|
views
::
filter
(
even
)
|
views
::
transform
(
square
)
)
{
cout
<
<
i
<
<
' '
;
// prints: 0 4 16
}
assert
(
ranges
::
equal
(
ints
|
views
::
filter
(
even
)
, views
::
filter
(
ints, even
)
)
)
;
—
end example
]