std::begin, std::cbegin
Определён в заголовочном файле <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 begin( C& c ) -> decltype(c.begin()); | (1) |
(начиная с C++11) (constexpr начиная с C++17) |
template< class C > auto begin( const C& c ) -> decltype(c.begin()); | (2) |
(начиная с C++11) (constexpr начиная с C++17) |
template< class T, std::size_t N > T* begin( T (&array)[N] ); | (3) |
(начиная с C++11) (noexcept начиная с C++14) (constexpr начиная с C++14) |
template< class C >
constexpr auto cbegin( const C& c ) noexcept(/* see below */)
-> decltype(std::begin(c));
| (4) | (начиная с C++14) |
Возвращает итератор на начало заданного диапазона.
c.begin(), который обычно является итератором на начало последовательности, представленной c.array.std::begin(c), при этом c всегда рассматривается как константный.Параметры
| c | - | контейнер или представление с функцией-членом begin |
| array | - | массив произвольного типа |
Возвращаемое значение
c.begin()
array
c.begin()
Исключения
noexcept спецификация: noexcept(noexcept(std::begin(c)))
Перегрузки
Для классов и перечислений, которые не предоставляют подходящую функцию-член begin(), но допускают итерацию, можно определить пользовательские перегрузки begin. Стандартная библиотека уже предоставляет следующие перегрузки:
|
(C++17) | поддержка цикла for на основе диапазона (функция) |
|
(C++17) | поддержка цикла 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) |
Примечания
Перегрузки для не-массивов в точности отражают поведение C::begin. Их эффекты могут быть неожиданными, если функция-член реализована ненадлежащим образом.
std::cbegin введена для унификации доступа к диапазонам через функции-члены и не-члены. См. также задачу LWG 2128.
Если C является представлением с поверхностной константностью, 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/cpp/iterator/begin