std::counted_iterator<I>::base
constexpr const I& base() const& noexcept; | (1) | (с C++20) |
constexpr I base() &&; | (2) | (с C++20) |
Возвращает базовый итератор.
1) Возвращает ссылку на базовый итератор.
2) Перемещающее создание возвращаемого значения из базового итератора.
Параметры
(нет)
Возвращаемое значение
1) Ссылка на базовый итератор.
2) Итератор, созданный перемещением из базового итератора.
Исключения
Может выбросить определяемые реализацией исключения.
Пример
#include <algorithm>
#include <iostream>
#include <iterator>
#include <type_traits>
#include <vector>
int main()
{
std::vector<int> v{0, 1, 2, 3, 4};
std::reverse_iterator<std::vector<int>::iterator> reverse{v.rbegin()};
std::counted_iterator counted{reverse, 3};
static_assert(std::is_same<
decltype(counted.base()),
std::reverse_iterator<std::vector<int>::iterator> const&
>{});
std::cout << "Print with reverse_iterator: ";
for (auto r = counted.base(); r != v.rend(); ++r)
std::cout << *r << ' ';
std::cout << '\n';
std::cout << "Print with counted_iterator: ";
for (; counted != std::default_sentinel; ++counted)
std::cout << counted[0] << ' ';
std::cout << '\n';
}Вывод:
Print with reverse_iterator: 4 3 2 1 0 Print with counted_iterator: 4 3 2
Отчеты об ошибках
Следующие отчеты об ошибках, меняющих поведение, были применены ретроактивно к ранее опубликованным стандартам C++.
| DR | Применено к | Поведение, как опубликовано | Правильное поведение |
|---|---|---|---|
| LWG 3391 | C++20 | const-версия base возвращает копию базового итератора | возвращает ссылку |
| LWG 3593 | C++20 | const-версия base возвращает ссылку, но может не быть noexcept | сделано noexcept |
См. также
|
(C++20) | доступ к указанному элементу (публичный член-функция) |
|
(C++20) | возвращает расстояние до конца (публичный член-функция) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/iterator/counted_iterator/base