Функция ranges::end
Функция ranges::end возвращает итератор,
указывающий на позицию после последнего элемента
диапазона. Сама коллекция при этом не изменяется.
В первый параметр мы передаем диапазон (контейнер,
массив или view), для которого нужно получить
конечный итератор. Функция доступна из заголовочного
файла <ranges> и является частью
библиотеки Ranges, добавленной в C++20.
В отличие от классической функции std::end,
версия из пространства имен ranges умеет
работать не только с контейнерами, но и с
представлениями (views) и любыми объектами,
для которых определено понятие диапазона.
Синтаксис
std::ranges::end(range)
Пример
Давайте получим итератор на конец вектора и пройдём по всем его элементам с помощью цикла:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
for (auto it = ranges::begin(v); it != ranges::end(v); ++it)
{
cout << *it << " ";
}
cout << endl;
return 0;
}
Результат выполнения кода:
1 2 3 4 5
Пример
Давайте вычислим расстояние от начала до конца диапазона, то есть количество его элементов:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<int> v = {1, 2, 3, 4, 5};
auto dist = ranges::distance(ranges::begin(v), ranges::end(v));
cout << dist << endl;
return 0;
}
Результат выполнения кода:
5
Пример
Давайте проверим, является ли диапазон пустым, сравнив начальный и конечный итераторы:
#include <iostream>
#include <vector>
#include <ranges>
using namespace std;
int main()
{
vector<int> v;
if (ranges::begin(v) == ranges::end(v))
{
cout << "empty" << endl;
}
return 0;
}
Результат выполнения кода:
"empty"
Смотрите также
-
функция
ranges::begin,
которая возвращает итератор на начало диапазона -
функция
begin,
которая возвращает итератор на начало контейнера -
функция
end,
которая возвращает итератор на конец контейнера -
функция
distance,
которая вычисляет расстояние между итераторами