std::end, std::cend
| ヘッダー <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 end( C& c ) -> decltype(c.end()); |
(1) | (C++11以降) (C++17 以降 constexpr) |
template< class C > auto end( const C& c ) -> decltype(c.end()); |
(2) | (C++11以降) (C++17 以降 constexpr) |
template< class T, std::size_t N > T* end( T (&array)[N] ); |
(3) | (C++11以降) (C++14以降 noexcept) (C++14以降constexpr) |
| template< class C > constexpr auto cend( const C& c ) noexcept(/* 以下参照 */) |
(4) | (C++14以降) |
指定された範囲の末尾(つまり、最後の要素の次の要素)を指すイテレータを返します。
目次 |
[編集] パラメータ
| c | - | end メンバ関数を持つコンテナまたはビュー |
| array | - | 任意の型の配列 |
[編集] 戻り値
[編集] 例外
[編集] オーバーロード
適切な end() メンバ関数を公開していないが、イテレート可能なクラスや列挙型に対して、end のカスタムオーバーロードを提供できます。標準ライブラリによって既に提供されているオーバーロードは以下の通りです。
| std::end を特殊化します。 (function template) | |
| (C++11) |
std::end を特殊化します。 (function template) |
| 範囲ベース for ループのサポート (function) | |
| 範囲ベース for ループのサポート (関数) |
swap の使用と同様に(Swappable で説明)、ジェネリックなコンテキストで end 関数を使用する一般的な方法は、using std::end; end(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); for (; it != end_it; ++it) f(*it); }
|
引数依存探索で見つかった |
(C++20以降) |
[編集] 注記
配列以外のオーバーロードは、C::end() の動作を正確に反映します。メンバ関数が適切な実装を持っていない場合、その効果は驚くべきものになる可能性があります。
std::cend は、メンバおよび非メンバの範囲アクセスを統一するために導入されました。 LWG issue 2128 も参照してください。
C がシャロー const ビューである場合、std::cend はミュータブルイテレータを返す可能性があります。このような動作は一部のユーザーにとって予期しないものです。 P2276 および P2278 も参照してください。
[編集] 例
#include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> v = {3, 1, 4}; if (std::find(std::begin(v), std::end(v), 5) != std::end(v)) std::cout << "Found a 5 in vector v!\n"; int w[] = {5, 10, 15}; if (std::find(std::begin(w), std::end(w), 5) != std::end(w)) std::cout << "Found a 5 in array w!\n"; }
出力
Found a 5 in array w!
[編集] 関連項目
| (C++11)(C++14) |
コンテナまたは配列の先頭を指すイテレータを返す (関数テンプレート) |
| (C++20) |
rangeの終端を示す番兵を返す (カスタマイゼーションポイントオブジェクト) |
| (C++20) |
読み取り専用rangeの終端を示す番兵を返す (カスタマイゼーションポイントオブジェクト) |