Namespaces
Variants

std:: begin, std:: cbegin

From cppreference.net
Iterator library
Iterator concepts
Iterator primitives
Algorithm concepts and utilities
Indirect callable concepts
Common algorithm requirements
(C++20)
(C++20)
(C++20)
Utilities
(C++20)
Iterator adaptors
Range access
begin cbegin
(C++11) (C++14)
(C++14) (C++14)
(C++11) (C++14)
(C++14) (C++14)
(C++17) (C++20)
(C++17)
(C++17)
定義先ヘッダ <array>
定義先ヘッダ <deque>
定義先ヘッダ <flat_map>
定義先ヘッダ <flat_set>
定義先ヘッダ <forward_list>
定義先ヘッダ <inplace_vector>
定義先ヘッダ <iterator>
定義先ヘッダ <list>
定義先ヘッダ <map>
定義先ヘッダ <regex>
定義先ヘッダ <set>
定義先ヘッダ <span>
定義先ヘッダ <string>
定義先ヘッダ <string_view>
定義先ヘッダ <unordered_map>
定義先ヘッダ <unordered_set>
定義先ヘッダ <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 ( /* 下記参照 */ )

- > decltype ( std :: begin ( c ) ) ;
(4) (C++14以降)

指定された範囲の先頭を指すイテレータを返します。

1,2) c. begin ( ) を返します。これは通常、 c によって表されるシーケンスの先頭を指すイテレータです。
1) もし C が標準の Container であれば、 C::iterator オブジェクトを返します。
2) もし C が標準の Container である場合、 C::const_iterator オブジェクトを返します。
3) 配列の先頭へのポインタを返します。
4) std :: begin ( c ) を返します。 c は常にconst修飾されているものとして扱われます。
C が標準の Container である場合、 C::const_iterator オブジェクトを返します。

range-begin-end.svg

目次

パラメータ

c - begin メンバ関数を持つコンテナまたはビュー
array - 任意の型の配列

戻り値

1,2) c. begin ( )
3) array
4) c. begin ( )

例外

4)
noexcept 指定子:
noexcept ( noexcept ( std :: begin ( c ) ) )

オーバーロード

適切な begin メンバ関数を公開していないが、反復処理が可能なクラスおよび列挙型に対して、 begin のカスタムオーバーロードを提供できます。標準ライブラリでは以下のオーバーロードが既に提供されています:

std::beginをオーバーロード std::begin
(関数テンプレート)
std::beginをオーバーロード std::begin
(関数テンプレート)
範囲ベース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;
    }
}

実引数依存の名前探索 によって見つかった begin のオーバーロードは、 std::ranges::begin std::ranges::cbegin および std::ranges::begin に依存する他のカスタマイゼーションポインタオブジェクトの動作をカスタマイズするために使用できます。

(C++20以降)

注記

非配列オーバーロードは C::begin の動作を正確に反映します。メンバー関数が合理的な実装を持たない場合、その効果は予想外のものとなる可能性があります。

std::cbegin は、メンバーおよび非メンバーの範囲アクセスの統一のために導入されました。関連項目: LWG issue 2128

C がshallow-const viewである場合、 std::cbegin はmutable iteratorを返す可能性があります。この動作は一部のユーザーにとって予期せぬものです。関連資料: 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)
コンテナまたは配列の終端を指すイテレータを返す
(関数テンプレート)
範囲の先頭を指すイテレータを返す
(カスタマイゼーションポイントオブジェクト)
読み取り専用範囲の先頭を指すイテレータを返す
(カスタマイゼーションポイントオブジェクト)