std::begin, std::cbegin
| ヘッダー <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以降) (C++17 以降 constexpr) |
template< class C > auto begin( const C& c ) -> decltype(c.begin()); |
(2) | (C++11以降) (C++17 以降 constexpr) |
template< class T, std::size_t N > T* begin( T (&array)[N] ); |
(3) | (C++11以降) (C++14以降 noexcept) (C++14以降constexpr) |
| template< class C > constexpr auto cbegin( const C& c ) noexcept(/* 以下参照 */) |
(4) | (C++14以降) |
指定された範囲の先頭へのイテレータを返します。
目次 |
[編集] パラメータ
| c | - | begin メンバ関数を持つコンテナまたはビュー |
| array | - | 任意の型の配列 |
[編集] 戻り値
[編集] 例外
[編集] オーバーロード
イテレート可能なクラスや列挙型で、適切な begin() メンバ関数が公開されていない場合のために、カスタムオーバーロードを提供できます。標準ライブラリはすでに以下のオーバーロードを提供しています。
| オーバーロード std::begin (function template) | |
| (C++11) |
オーバーロード std::begin (function template) |
| 範囲ベース for ループのサポート (function) | |
| 範囲ベース 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 issue 2128 も参照してください。
C がシャロー const ビューの場合、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) |
rangeの先頭を指すイテレータを返す (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
読み取り専用rangeの先頭を指すイテレータを返す (カスタマイゼーションポイントオブジェクト) |