std::begin,std::cbegin(3)
πΈ std::begin, std::cbegin β C++ Standard Libary (3) πΈ
okay so bestie, this is the C++ Standard Libary manual page for std::begin and std::cbegin, and the title line is std::begin,std::cbegin(3). Itβs giving βiterator to the beginning of the given rangeβ energy, and we are going through every single crumb. β¨
π NAME π
std::begin, std::cbegin β std::begin, std::cbegin
β¨ Synopsis β¨
First up, the header glow-up: this stuff is defined in a whole pile of headers. π
- Defined in header
<array> - Defined in header
<deque> - Defined in header
<flat_map> - Defined in header
<flat_set> - Defined in header
<forward_list> - Defined in header
<iterator> - Defined in header
<list> - Defined in header
<map> - Defined in header
<regex> - Defined in header
<set> - Defined in header
<span> - Defined in header
<string> - Defined in header
<string_view> - Defined in header
<unordered_map> - Defined in header
<unordered_set> - Defined in header
<vector>
Now the signatures, no cap:
template< class C >
auto begin( C& c ) -> decltype(c.begin()); (since C++11) (until C++17) (1)
template< class C >
constexpr auto begin( C& c ) -> decltype(c.begin()); (since C++17) (1)
template< class C >
auto begin( const C& c ) -> decltype(c.begin()); (since C++11) (until C++17) (2)
template< class C >
constexpr auto begin( const C& c ) -> decltype(c.begin()); (since C++17) (2)
template< class T, std::size_t N >
T* begin( T (&array)[N] ); (since C++11) (until C++14) (3)
template< class T, std::size_t N >
constexpr T* begin( T (&array)[N] ) noexcept; (since C++14) (3)
template< class C >
constexpr auto cbegin( const C& c ) noexcept(/* see below */)
-> decltype(std::begin(c)); (since C++14) (4)
Returns an iterator to the beginning of the given range. π«Ά
1,2)Returnsc.begin(), which is typically an iterator to the beginning of the sequence represented byc.1)IfCis a standard Container, returns aC::iteratorobject.2)IfCis a standard Container, returns aC::const_iteratorobject.3)Returns a pointer to the beginning ofarray.4)Returnsstd::begin(c), withcalways treated as const-qualified. IfCis a standard Container, returns aC::const_iteratorobject.
Thereβs even a diagram moment: range-begin-end.svg. π
π Parameters π
cβ a container or view with abeginmember functionarrayβ an array of arbitrary type
π Return value π
1,2)c.begin()3)array4)c.begin()
π¦ Exceptions π¦
4)noexceptspecification:noexcept(noexcept(std::begin(c)))
π Overloads π
Custom overloads of begin may be provided for classes and enumerations that do not expose a suitable begin() member function, yet can be iterated. The following overloads are already provided by the standard library:
std::begin(std::initializer_list)β overloadsstd::begin(C++11) (function template)std::begin(std::valarray)β overloadsstd::begin(C++11) (function template)begin(std::filesystem::directory_iterator),end(std::filesystem::directory_iterator)β range-based for loop support (function) (C++17)begin(std::filesystem::recursive_directory_iterator),end(std::filesystem::recursive_directory_iterator)β range-based for loop support (function)
Similar to the use of swap (described in Swappable), typical use of the begin function in generic context is an equivalent of using std::begin; begin(arg);, which allows both the ADL-selected overloads for user-defined types and the standard library function templates to appear in the same overload set. π§
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;
}
}
Overloads of begin found by argument-dependent lookup can be used to customize the behavior of std::ranges::begin, std::ranges::cbegin, and (since C++20) other customization pointer objects depending on std::ranges::begin.
π Notes π
The non-array overloads exactly reflect the behavior of C::begin. Their effects may be surprising if the member function does not have a reasonable implementation. π
std::cbegin is introduced for unification of member and non-member range accesses. See also LWG issue 2128.
If C is a shallow-const view, std::cbegin may return a mutable iterator. Such behavior is unexpected for some users. See also P2276 and P2278.
π Example π
Run this code:
#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';
}
Output:
+3
-5
β See also β
end(C++11) β returns an iterator to the end of a container or array (function template)cend(C++14) β returns an iterator to the end of a container or array (function template)ranges::begin(C++20) β returns an iterator to the beginning of a range (customization point object)ranges::cbegin(C++20) β returns an iterator to the beginning of a read-only range (customization point object)
π Category π
* conditionally noexcept
π source: http://cppreference.com Β· version/date: 2024.06.10 Β· page: std::begin,std::cbegin(3) β thatβs the whole page, bestie, mwah! π
π¦ where this page comes from
- nixpkgs unstable: stdman 2024.07.05
- opensuse-leap 16.0: stdman 2024.07.05-bp160.1.9 Β· MIT
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms