std::end, std::cend
| Определён в заголовке <array>
|
||
| Определён в заголовке <deque>
|
||
| Определён в заголовке <flat_map>
|
(начиная с C++23) |
|
| Определён в заголовке <flat_set>
|
(начиная с C++23) |
|
| Определён в заголовке <forward_list>
|
||
| Определён в заголовке <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 всегда рассматривается как const-квалифицированный.
Параметры
| c | - |
контейнер или представление с функцией-членом
end
|
| array | - | массив произвольного типа |
Возвращаемое значение
Исключения
Перегрузки
Пользовательские перегрузки
end
могут быть предоставлены для классов и перечислений, которые не предоставляют подходящую функцию-член
end()
, но по которым можно итерироваться. Следующие перегрузки уже предоставлены стандартной библиотекой:
|
(C++11)
|
специализирует
std::end
(шаблон функции) |
|
(C++11)
|
специализирует
std::end
(шаблон функции) |
|
поддержка range-based for loop
(функция) |
|
|
поддержка range-based for loop
(функция) |
Подобно использованию
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 issue 2128
.
Если
C
является shallow-const представлением,
std::cend
может возвращать mutable итератор. Такое поведение является неожиданным для некоторых пользователей. Смотрите также
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)
|
возвращает страж, указывающий на конец диапазона только для чтения
(объект точки настройки) |