std::end, std::cend
Определён в заголовочном файле <array> | ||
|---|---|---|
Определён в заголовочном файле <deque> | ||
Определён в заголовочном файле <flat_map> | (начиная с C++23) | |
Определён в заголовочном файле <flat_set> | (начиная с C++23) | |
Определён в заголовочном файле <forward_list> | ||
Определён в заголовочном файле <hive> | (начиная с C++26) | |
Определён в заголовочном файле <inplace_vector> | (начиная с C++26) | |
Определён в заголовочном файле <iterator> | ||
Определён в заголовочном файле <list> | ||
Определён в заголовочном файле <map> | ||
Определён в заголовочном файле <optional> | (начиная с C++26) | |
Определён в заголовочном файле <regex> | ||
Определён в заголовочном файле <set> | ||
Определён в заголовочном файле <span> | (начиная с C++20) | |
Определён в заголовочном файле <stacktrace> | (начиная с C++23) | |
Определён в заголовочном файле <string> | ||
Определён в заголовочном файле <string_view> | (начиная с C++17) | |
Определён в заголовочном файле <unordered_map> | ||
Определён в заголовочном файле <unordered_set> | ||
Определён в заголовочном файле <valarray> | ||
Определён в заголовочном файле <vector> |
template< class C > auto end( C& c ) -> decltype(c.end()); | (1) |
(начиная с C++11) (constexpr начиная с C++17) |
template< class C > auto end( const C& c ) -> decltype(c.end()); | (2) |
(начиная с C++11) (constexpr начиная с C++17) |
template< class T, std::size_t N > T* end( T (&array)[N] ); | (3) |
(начиная с C++11) (noexcept начиная с C++14) (constexpr начиная с C++14) |
template< class C >
constexpr auto cend( const C& c ) noexcept(/* see below */)
-> decltype(std::end(c));
| (4) | (начиная с C++14) |
Возвращает итератор на конец (то есть на элемент после последнего элемента) заданного диапазона.
c.end(), который обычно является итератором на позицию сразу после конца последовательности, представленной c.array.std::end(c), при этом c всегда рассматривается как константный.Параметры
| c | - | контейнер или представление с функцией-членом end |
| array | - | массив произвольного типа |
Возвращаемое значение
c.end()
array + N
c.end()
Исключения
noexcept спецификация: noexcept(noexcept(std::end(c)))
Перегрузки
Для классов и перечислений, которые не предоставляют подходящую функцию-член end(), но допускают итерацию, можно определить пользовательские перегрузки end. Стандартная библиотека уже предоставляет следующие перегрузки:
|
(C++17) | поддержка цикла for на основе диапазона (функция) |
|
(C++17) | поддержка цикла for на основе диапазона (функция) |
Как и в случае с swap (описанным в Swappable), типичное использование функции end в обобщённом контексте эквивалентно using std::end; end(arg);, что позволяет включить в один набор перегрузок как перегрузки для пользовательских типов, выбранные с помощью ADL, так и шаблоны функций стандартной библиотеки.
template<typename Container, typename Function>
void for_each(Container&& cont, Function f)
{
using std::begin;
auto it = begin(cont);
using std::end;
auto end_it = end(cont);
for (; it != end_it; ++it)
f(*it);
}
| Перегрузки | (начиная с C++20) |
Примечания
Перегрузки для не-массивов в точности повторяют поведение C::end(). Их результат может оказаться неожиданным, если функция-член реализована ненадлежащим образом.
std::cend введена для унификации доступа к диапазонам через функции-члены и функции, не являющиеся членами класса. См. также проблему LWG 2128.
Если C — представление с поверхностной константностью, std::cend может возвращать изменяемый итератор. Для некоторых пользователей такое поведение неожиданно. См. также P2276 и P2278.
Пример
#include <algorithm>
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v = {3, 1, 4};
if (std::find(std::begin(v), std::end(v), 5) != std::end(v))
std::cout << "Found a 5 in vector v!\n";
int w[] = {5, 10, 15};
if (std::find(std::begin(w), std::end(w), 5) != std::end(w))
std::cout << "Found a 5 in array w!\n";
}
Вывод:
Found a 5 in array w!
См. также
|
(C++11)(C++14) | возвращает итератор на начало контейнера или массива (шаблон функции) |
|
(C++20) | возвращает сентинел, обозначающий конец диапазона (объект-точка настройки) |
|
(C++20) | возвращает сентинел, обозначающий конец диапазона только для чтения (объект-точка настройки) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/iterator/end