Składnia
#include <iterator>
template < typename C >
constexpr auto cbegin( const C & c ) noexcept( )->decltype( std::begin( c ) );
template < typename T, std::size_t N >
constexpr const T * cbegin( const T( & array )[ N ] ) noexcept;
template < typename T >
const T * cbegin( initializer_list < T > il ) noexcept;
template < typename T >
cbegin( const valarray < T >& v );
directory_iterator cbegin( directory_iterator iter ) noexcept;
recursive_directory_iterator cbegin( recursive_directory_iterator iter ) noexcept;
Powyższe
noexcept
jest
noexcept
, jeśli odpowiadające temu kontenerowi
std::begin( c )
również jest
noexcept
:
noexcept( noexcept( std::begin( c ) ) )
Parametry szablonu
Argumenty
Zwracana wartość
Dla kontenerów zwracane jest dokładnie to co zwraca
C::begin()
ale jako
const
. Jeśli C jest standardowym kontenerem to zwracany jest stały iterator do pierwszego elementu kontenera, typu
typename C::const_iterator
.
W przypadku tablic jest zwracany stały wskaźnik na pierwszy element tablicy.
Opis szczegółowy
Jest to funkcja, która dla kontenerów zwraca stały iterator na pierwszy element kontenera (czyli to co metoda
C::begin()
zwraca, dla kontenerów standardowych będzie to wewnętrzny typ
typename C::const_iterator
). Funkcja przyjmując tablicę statyczną zwraca stały wskaźnik na początek tablicy.
Dodatkowe informacje
Funkcja ta nie działa dla tablic dynamicznych, gdyż nie jest możliwe wygenerowanie w trakcie kompilacji specjalizacji dla funkcji gdy rozmiar tablicy, podanej jako argument, nie jest znany podczas kompilacji.
Rzucane wyjątki
Jesli
std::begin( c )
nie rzuca wyjątków, to również
std::cbegin( c )
ich nie rzuca (
noexcept
).
Wymagania
Kompilator posiadający implementację szablonu funkcji
std::cbegin()
, lub zgodny z C++14.
Implementacja
template < typename C >
constexpr const auto cbegin( const C & c ) noexcept( noexcept( std::begin( c ) ) )->decltype( std::begin( c ) )
{
return c.begin();
}
template < typename T, std::size_t N >
constexpr const T * cbegin( const T( & array )[ N ] ) noexcept
{
return array;
}
Przykład
#include <iostream>
#include <vector>
using namespace std;
struct MyContainer
{
int arr[ 10 ];
auto begin() const
{
return arr;
}
};
int main()
{
vector < int > v = { 1, 3, 5, 7, 9 };
cout << "begin of vector: " << * cbegin( v ) << endl;
v[ 0 ] = 3;
cout << "begin of vector: " << * cbegin( v ) << endl;
double arr[] = { 3.14, 2.78 };
cout << "second element of array: " << *( cbegin( arr ) + 1 ) << endl;
MyContainer c = { { 5, 7 } };
cout << "First element of my container: " << * cbegin( c ) << endl;
}
Standardowe wyjście programu:
begin of vector: 1
begin of vector: 3
second element of array: 2.78
First element of my container: 5
Linki zewnętrzne
dokumentacja angielska
Linki zewnętrzne