|
1146 | 1146 | its type is integer-like.
|
1147 | 1147 | \end{note}
|
1148 | 1148 |
|
1149 |
| -\rSec2[range.approximately.sized]{Approximately sized ranges} |
1150 |
| - |
1151 |
| -\pnum |
1152 |
| -The \libconcept{approximately_sized_range} concept refines \libconcept{range} |
1153 |
| -with the requirement that |
1154 |
| -an approximation of the number of elements in the range |
1155 |
| -can be determined in amortized constant time using \tcode{ranges::reserve_hint}. |
1156 |
| - |
1157 |
| -\begin{itemdecl} |
1158 |
| -template<class T> |
1159 |
| - concept @\deflibconcept{approximately_sized_range}@ = |
1160 |
| - @\libconcept{range}@<T> && requires(T& t) { ranges::reserve_hint(t); }; |
1161 |
| -\end{itemdecl} |
1162 |
| - |
1163 |
| -\begin{itemdescr} |
1164 |
| -\pnum |
1165 |
| -Given an lvalue \tcode{t} of type \tcode{remove_reference_t<T>}, |
1166 |
| -\tcode{T} models \libconcept{approximately_sized_range} only if |
1167 |
| -\begin{itemize} |
1168 |
| -\item |
1169 |
| -\tcode{ranges::reserve_hint(t)} is amortized \bigoh{1}, |
1170 |
| -does not modify \tcode{t}, and |
1171 |
| -has a value that |
1172 |
| -is not negative and is representable in \tcode{range_difference_t<T>}, and |
1173 |
| -\item |
1174 |
| -if \tcode{iterator_t<T>} models \libconcept{forward_iterator}, |
1175 |
| -\tcode{ranges::reserve_hint(t)} is well-defined |
1176 |
| -regardless of the evaluation of \tcode{ranges::begin(t)}. |
1177 |
| -\begin{note} |
1178 |
| -\tcode{ranges::reserve_hint(t)} is otherwise not required to be well-defined |
1179 |
| -after evaluating \tcode{ranges::\linebreak begin(t)}. |
1180 |
| -For example, |
1181 |
| -it is possible for \tcode{ranges::reserve_hint(t)} to be well-defined for |
1182 |
| -an \libconceptx{approximate\-ly_sized_range}{approximately_sized_range} whose |
1183 |
| -iterator type does not model \libconcept{forward_iterator} |
1184 |
| -only if evaluated before the first call to \tcode{ranges::begin(t)}. |
1185 |
| -\end{note} |
1186 |
| -\end{itemize} |
1187 |
| -\end{itemdescr} |
1188 |
| - |
1189 | 1149 | \rSec2[range.prim.empty]{\tcode{ranges::empty}}
|
1190 | 1150 | \indexlibraryglobal{empty}%
|
1191 | 1151 |
|
|
1463 | 1423 | \end{example}
|
1464 | 1424 | \end{itemdescr}
|
1465 | 1425 |
|
| 1426 | +\rSec2[range.approximately.sized]{Approximately sized ranges} |
| 1427 | + |
| 1428 | +\pnum |
| 1429 | +The \libconcept{approximately_sized_range} concept refines \libconcept{range} |
| 1430 | +with the requirement that |
| 1431 | +an approximation of the number of elements in the range |
| 1432 | +can be determined in amortized constant time using \tcode{ranges::reserve_hint}. |
| 1433 | + |
| 1434 | +\begin{itemdecl} |
| 1435 | +template<class T> |
| 1436 | + concept @\deflibconcept{approximately_sized_range}@ = |
| 1437 | + @\libconcept{range}@<T> && requires(T& t) { ranges::reserve_hint(t); }; |
| 1438 | +\end{itemdecl} |
| 1439 | + |
| 1440 | +\begin{itemdescr} |
| 1441 | +\pnum |
| 1442 | +Given an lvalue \tcode{t} of type \tcode{remove_reference_t<T>}, |
| 1443 | +\tcode{T} models \libconcept{approximately_sized_range} only if |
| 1444 | +\begin{itemize} |
| 1445 | +\item |
| 1446 | +\tcode{ranges::reserve_hint(t)} is amortized \bigoh{1}, |
| 1447 | +does not modify \tcode{t}, and |
| 1448 | +has a value that |
| 1449 | +is not negative and is representable in \tcode{range_difference_t<T>}, and |
| 1450 | +\item |
| 1451 | +if \tcode{iterator_t<T>} models \libconcept{forward_iterator}, |
| 1452 | +\tcode{ranges::reserve_hint(t)} is well-defined |
| 1453 | +regardless of the evaluation of \tcode{ranges::begin(t)}. |
| 1454 | +\begin{note} |
| 1455 | +\tcode{ranges::reserve_hint(t)} is otherwise not required to be well-defined |
| 1456 | +after evaluating \tcode{ranges::\linebreak begin(t)}. |
| 1457 | +For example, |
| 1458 | +it is possible for \tcode{ranges::reserve_hint(t)} to be well-defined for |
| 1459 | +an \libconceptx{approximate\-ly_sized_range}{approximately_sized_range} whose |
| 1460 | +iterator type does not model \libconcept{forward_iterator} |
| 1461 | +only if evaluated before the first call to \tcode{ranges::begin(t)}. |
| 1462 | +\end{note} |
| 1463 | +\end{itemize} |
| 1464 | +\end{itemdescr} |
| 1465 | + |
1466 | 1466 | \rSec2[range.sized]{Sized ranges}
|
1467 | 1467 |
|
1468 | 1468 | \pnum
|
|
0 commit comments