Namespaces
Variants

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

Von de.cppreference.net
 
 
Ranges-Bibliothek
Range-Adaptoren
 
 
constexpr subrange& advance( std::iter_difference_t<I> n );
(seit C++20)

Erhöht oder verringert begin_ :

Äquivalent zu: ranges::advance(begin_ , n);
if constexpr (StoreSize )
    size_ += to-unsigned-like (-n);
return *this;
.
  • Andernfalls erhöht begin_ um n Elemente, oder bis end_ erreicht ist.
Äquivalent zu: 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 negativ true ist und begin_ nicht um -n Elemente verringert werden kann.

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)