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 |
См. также
| обращается к элементу, на который указывает итератор (открытая функция-член) |
|
| возвращает расстояние до конца (открытая функция-член) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/counted_iterator/base