std::end, std::cend
Определено в заголовке <array> | ||
|---|---|---|
Определено в заголовке <deque> | ||
Определено в заголовке <forward_list> | ||
Определено в заголовке <iterator> | ||
Определено в заголовке <list> | ||
Определено в заголовке <map> | ||
Определено в заголовке <regex> | ||
Определено в заголовке <set> | ||
Определено в заголовке <span> | (с C++20) | |
Определено в заголовке <string> | ||
Определено в заголовке <string_view> | (с C++17) | |
Определено в заголовке <unordered_map> | ||
Определено в заголовке <unordered_set> | ||
Определено в заголовке <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) |
| (3) | ||
template< class T, std::size_t N > T* end( T (&array)[N] ); |
(с C++11) (до C++14) | |
template< class T, std::size_t N > constexpr T* end( T (&array)[N] ) noexcept; | (с C++14) | |
template< class C >
constexpr auto cend( const C& c ) noexcept(/* see below */)
-> decltype(std::end(c)); | (4) | (с C++14) |
Возвращает итератор к концу (т.е. элементу после последнего элемента) заданного диапазона.
c.end(), что обычно является итератором, указывающим на элемент, следующий за концом последовательности, представленной c. Если C является стандартным контейнером:C::iterator (когда c не имеет квалификатора const), иначеC::const_iterator.
array.
std::end(c), где c всегда рассматривается как имеющий квалификатор const. Если C является стандартным контейнером, это всегда возвращает C::const_iterator.
Параметры
| c | - | контейнер или представление с функцией-членом end |
| array | - | массив произвольного типа |
Значение результата
Итератор к концу диапазона. Обратите внимание, что конец диапазона определен как элемент, следующий за последним допустимым элементом.
Исключения
noexcept спецификация: noexcept(noexcept(std::end(c)))Перегрузки
Могут быть предоставлены пользовательские перегрузки end для классов и перечислений, которые не предоставляют подходящей функции-члена end(), но могут быть итерированы. Следующие перегрузки уже предоставляются стандартной библиотекой:
|
(C++11) | специализация std::end (шаблон функции) |
|
(C++11) | специализация std::end (шаблон функции) |
|
(C++17) | поддержка циклов range-based for (функция) |
| поддержка циклов range-based 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) |
Замечания
(1,4) точно отражают поведение C::end(). Их последствия могут быть неожиданными, если функция-член не имеет соответствующей реализации.
std::cend введено для унификации доступа к диапазонам с использованием функций-членов и без них. См. также LWG issue 2128.
Если C является представлением с поверхностным const, 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/w/cpp/iterator/end