std:: next
|
Défini dans l'en-tête
<iterator>
|
||
|
template
<
class
InputIt
>
InputIt next ( InputIt it, typename std:: iterator_traits < InputIt > :: difference_type n = 1 ) ; |
(depuis C++11)
(jusqu'à C++17) |
|
|
template
<
class
InputIt
>
constexpr
|
(depuis C++17) | |
Retourne le n ème successeur (ou le - n ème prédécesseur si n est négatif) de l'itérateur it .
Table des matières |
Paramètres
| it | - | un itérateur |
| n | - | nombre d'éléments à avancer |
| Exigences de type | ||
-
InputIt
doit satisfaire aux exigences de
LegacyInputIterator
.
|
||
Valeur de retour
Un itérateur de type
InputIt
qui contient le
n
ème
successeur (ou le
-
n
ème
prédécesseur si
n
est négatif) de l'itérateur
it
.
Complexité
Linéaire.
Cependant, si
InputIt
satisfait également aux exigences de
LegacyRandomAccessIterator
, la complexité est constante.
Implémentation possible
template<class InputIt> constexpr // depuis C++17 InputIt next(InputIt it, typename std::iterator_traits<InputIt>::difference_type n = 1) { std::advance(it, n); return it; } |
Notes
Bien que l'expression
++
c.
begin
(
)
compile souvent, elle n'est pas garantie de le faire :
c.
begin
(
)
est une expression rvalue, et il n'existe aucune
exigence LegacyInputIterator
qui spécifie que l'incrément d'une rvalue est garanti de fonctionner. En particulier, lorsque les itérateurs sont implémentés comme des pointeurs ou que leur
operator++
est qualifié de référence lvalue,
++
c.
begin
(
)
ne compile pas, tandis que
std
::
next
(
c.
begin
(
)
)
le fait.
Exemple
#include <iostream> #include <iterator> #include <vector> int main() { std::vector<int> v{4, 5, 6}; auto it = v.begin(); auto nx = std::next(it, 2); std::cout << *it << ' ' << *nx << '\n'; it = v.end(); nx = std::next(it, -2); std::cout << ' ' << *nx << '\n'; }
Sortie :
4 6 5
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 2353 | C++11 |
next
nécessitait
LegacyForwardIterator
|
LegacyInputIterator autorisé |
Voir aussi
|
(C++11)
|
décrémente un itérateur
(modèle de fonction) |
|
avance un itérateur d'une distance donnée
(modèle de fonction) |
|
|
retourne la distance entre deux itérateurs
(modèle de fonction) |
|
|
(C++20)
|
incrémente un itérateur d'une distance donnée ou jusqu'à une limite
(objet fonction algorithme) |