std::begin, std::cbegin
Определено в заголовке <array> | ||
|---|---|---|
Определено в заголовке <deque> | ||
Определено в заголовке <forward_list> | ||
Определено в заголовке <iterator> | ||
Определено в заголовке <list> | ||
Определено в заголовке <map> | ||
Определено в заголовке <regex> | ||
Определено в заголовке <set> | ||
Определено в заголовке <span> | (с C++20) | |
Определено в заголовке <string> | ||
Определено в заголовке <string_view> | (с C++17) | |
Определено в заголовке <unordered_map> | ||
Определено в заголовке <unordered_set> | ||
Определено в заголовке <vector> | ||
| (1) | ||
template< class C > auto begin( C& c ) -> decltype(c.begin()); | (с C++11) (до C++17) | |
template< class C > constexpr auto begin( C& c ) -> decltype(c.begin()); | (с C++17) | |
| (1) | ||
template< class C > auto begin( const C& c ) -> decltype(c.begin()); | (с C++11) (до C++17) | |
template< class C > constexpr auto begin( const C& c ) -> decltype(c.begin()); | (с C++17) | |
| (2) | ||
template< class T, std::size_t N > T* begin( T (&array)[N] ); | (с C++11) (до C++14) | |
template< class T, std::size_t N > constexpr T* begin( T (&array)[N] ) noexcept; | (с C++14) | |
template< class C >
constexpr auto cbegin( const C& c ) noexcept(/* see below */)
-> decltype(std::begin(c));
| (3) | (с C++14) |
Возвращает итератор к началу заданного диапазона.
c.begin(), что обычно является итератором к началу последовательности, представленной c. Если C — стандартный контейнер, это возвращает C::iterator когда c не имеет квалификатора const, и C::const_iterator в противном случае.array.std::begin(c), где c всегда рассматривается как имеющий квалификатор const. Если C — стандартный контейнер, это всегда возвращает C::const_iterator.Параметры
| c | - | контейнер или представление с членом-функцией begin |
| array | - | массив произвольного типа |
Значение результата
Итератор к началу диапазона.
Исключения
noexcept спецификация: noexcept(noexcept(std::begin(c)))Перегрузки
Могут быть предоставлены пользовательские перегрузки begin для классов и перечислений, которые не раскрывают подходящую функцию-член begin(), но могут быть итерированы. Следующие перегрузки уже предоставляются стандартной библиотекой:
|
(C++11) | перегрузки std::begin (шаблон функции) |
|
(C++11) | перегрузки std::begin (шаблон функции) |
|
(C++17) | поддержка циклов for диапазона (функция) |
| поддержка циклов for диапазона (функция) |
Аналогично использованию swap (описано в Swappable), типичное использование функции begin в общем контексте эквивалентно using std::begin; begin(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);
while (it != end_it)
{
f(*it);
++it;
}
}| Перегрузки | (с C++20) |
Примечания
(1,3) точно отражают поведение C::begin(). Их эффекты могут быть неожиданными, если функция-член не имеет разумной реализации.
std::cbegin вводится для унификации доступа к диапазонам через члены и без них. См. также LWG issue 2128.
Если C — представление с поверхностным const, std::cbegin может вернуть изменяемый итератор. Такое поведение является неожиданным для некоторых пользователей. См. также P2276 и P2278.
Пример
#include <iostream>
#include <iterator>
#include <vector>
int main()
{
std::vector<int> v = {3, 1, 4};
auto vi = std::begin(v);
std::cout << std::showpos << *vi << '\n';
int a[] = {-5, 10, 15};
auto ai = std::begin(a);
std::cout << *ai << '\n';
}Вывод:
+3 -5
См. также
|
(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/begin