Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?
Hasło nie zostało zweryfikowane
Niniejsze hasło zostało opracowane, jednak nie zostało ono zweryfikowane przez administrację serwisu. Jeżeli znalazłeś błędy merytoryczne w niniejszym dokumencie, prosimy o ich zgłoszenie na forum w dziale Znalezione błędy.
Opracował: baziorek
Język C++

cbegin

[szablon funkcji] Jest to funkcja zwracająca stały iterator na pierwszy element kontenera lub stały wskaźnik na początek tablicy.

Składnia

C/C++
#include <iterator>

template < typename C >
constexpr auto cbegin( const C & c ) noexcept( /*szczegoły poniżej*/ )->decltype( std::begin( c ) );

// w oparciu o powyzsze zostanie wygenerowana rownież wersja dla tablic (std::begin ma przeciążoną wersje dla tablic):
template < typename T, std::size_t N >
constexpr const T * cbegin( const T( & array )[ N ] ) noexcept;

// przeciążenia:
template < typename T >
const T * cbegin( initializer_list < T > il ) noexcept;
template < typename T >
/*nieznany*/ cbegin( const valarray < T >& v );

// wraz z C++17 pojawiły się następujące przeciążenia:
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

ParametrOpis
Ckontener, dla którego działa metoda
std::begin()
Ttyp tablicy statycznej, przekazanej jako argument
Nilość elementów tablicy statycznej

Argumenty

ArgumentOpis
cstała referencja do kontenera zawierającego metodę
std::begin()
arraystała referencja do statycznej tablicy

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

C/C++
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

C/C++
#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