Namespaces
Variants

std::ranges::subrange<I,S,K>:: advance

From cppreference.net
Ranges library
Range adaptors
constexpr subrange & advance ( std:: iter_difference_t < I > n ) ;
(seit C++20)

Erhöht oder verringert begin_ :

Entspricht: ranges:: advance ( begin_  , n ) ;
if constexpr ( StoreSize  )
size_ + = to-unsigned-like  ( - n ) ;
return * this ;
.
  • Andernfalls wird begin_ um n Elemente erhöht, oder bis end_ erreicht wird.
Entspricht: auto d = n - ranges:: advance ( begin_  , n, end_  ) ;
if constexpr ( StoreSize  )
size_ - = to-unsigned-like  ( d ) ;
return * this ;
.


Gemäß den Vorbedingungen von ranges::advance ist das Verhalten undefiniert, wenn n < 0 true ist und begin_ nicht um - n Elemente dekrementiert werden kann.

Inhaltsverzeichnis

Parameter

n - Anzahl der maximalen Inkremente des Iterators

Rückgabewert

* this

Beispiel

#include <algorithm>
#include <array>
#include <iostream>
#include <iterator>
#include <ranges>
void print(auto name, auto const sub)
{
    std::cout << name << ".size() == " << sub.size() << "; { ";
    std::ranges::for_each(sub, [](int x) { std::cout << x << ' '; });
    std::cout << "}\n";
};
int main()
{
    std::array arr{1, 2, 3, 4, 5, 6, 7};
    std::ranges::subrange sub{std::next(arr.begin()), std::prev(arr.end())};
    print("1) sub", sub);
    print("2) sub", sub.advance(3));
    print("3) sub", sub.advance(-2));
}

Ausgabe:

1) sub.size() == 5; { 2 3 4 5 6 }
2) sub.size() == 2; { 5 6 }
3) sub.size() == 4; { 3 4 5 6 }

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrigiertes Verhalten
LWG 3433 C++20 das Verhalten war undefiniert falls n < 0 wurde wohldefiniert falls begin_ dekrementiert werden kann

Siehe auch

erhält eine Kopie des subrange mit seinem Iterator um eine gegebene Distanz vorwärts bewegt
(öffentliche Elementfunktion)
erhält eine Kopie des subrange mit seinem Iterator um eine gegebene Distanz rückwärts bewegt
(öffentliche Elementfunktion)
bewegt einen Iterator um eine gegebene Distanz vorwärts
(Funktionstemplate)
bewegt einen Iterator um eine gegebene Distanz oder bis zu einer gegebenen Grenze
(Algorithmus-Funktionsobjekt)