Spec-Zone.ru › C++

operator-(std::counted_iterator)

template< std::common_with<I> I2 >
    friend constexpr std::iter_difference_t<I2> operator-(
        const counted_iterator& x, const counted_iterator<I2>& y );
(с C++20)

Вычисляет расстояние между двумя адаптерами итераторов.

Поведение не определено, если x и y не указывают на элементы одной последовательности. То есть, должен существовать некоторый n, такой что std::next(x.base(), x.count() + n) и std::next(y.base(), y.count() + n) ссылаются на один и тот же элемент.

Этот шаблон функции не виден для обычного неквалифицированного или квалифицированного поиска и может быть найден только с помощью поиска зависимого от аргументов, когда std::counted_iterator<I> является ассоциированным классом аргументов.

Параметры

x, y - адаптеры итераторов для вычисления разности

Значение результата

y.count() - x.count()

Примечания

Поскольку длина отсчитывается вниз, а не вверх, порядок аргументов operator- в базовом выражении инвертирован, т.е. y является lhs, а x является rhs.

Пример

#include <initializer_list>
#include <iterator>
 
int main()
{
    static constexpr auto v = {1, 2, 3, 4, 5, 6};
    constexpr std::counted_iterator<std::initializer_list<int>::iterator>
        it1{v.begin(), 5},
        it2{it1 + 3},
        it3{v.begin(), 2};
 
    static_assert(it1 - it2 == -3);
    static_assert(it2 - it1 == +3);
//  static_assert(it1 - it3 == -3); // UB: operands of operator- do not refer to
                                    // elements of the same sequence
}

См. также

operator++operator++(int)operator+=operator+operator--operator--(int)operator-=operator-
(C++20)
перемещает или уменьшает итератор
(публичный член-функция)
operator+
(C++20)
перемещает итератор
(шаблон функции)
operator-(std::default_sentinel_t)
(C++20)
вычисляет знаковое расстояние до конца
(шаблон функции)

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/counted_iterator/operator-

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API