std::end, std::cend
| ヘッダ <array>
|
||
| で定義 <deque>
|
||
| ヘッダ <flat_map>
|
で定義 (C++23以降) |
|
| ヘッダ <flat_set>
|
で定義 (C++23以降) |
|
| ヘッダ <forward_list>
|
||
ヘッダ |
||
| で定義 (C++26以降) <iterator>
|
||
| ヘッダ <list>
|
||
| で定義 <map>
|
||
| ヘッダ <optional>
|
で定義 (C++26以降) |
|
| ヘッダ <regex>
|
||
| で定義 <set>
|
||
| ヘッダ <span>
|
で定義 (C++20以降) |
|
| ヘッダ <stacktrace>
|
で定義 (C++23以降) |
|
| ヘッダ <string>
|
||
ヘッダ |
||
| で定義 (C++17以降) <unordered_map>
|
||
| ヘッダ <unordered_set>
|
||
| で定義 <valarray>
|
||
| ヘッダ <vector>
|
||
template< class C >
auto end( C& c ) -> decltype(c.end());
|
で定義 (1) | (C++11以降) (constexpr、C++17以降) |
template< class C >
auto end( const C& c ) -> decltype(c.end());
|
(2) | (C++11以降) (constexpr、C++17以降) |
template< class T, std::size_t N >
T* end( T (&array)[N] );
|
(3) | (C++11以降) (noexcept、C++14以降) (constexpr、C++14以降) |
template< class C >
constexpr auto cend( const C& c ) noexcept(/* see below */)
-> decltype(std::end(c));
|
(4) | (C++14以降) |
指定された範囲の終端(つまり最後の要素の次の要素)を指すイテレータを返します。
c.end()を返します。これは通常、cで表されるシーケンスの終端を一つ超えたイテレータです。arrayの終端を指すポインタを返します。std::end(c)を返します。cは常にconst修飾として扱われます。
パラメータ
| c | - |
endメンバ関数を持つコンテナまたはビュー
|
| array | - | 任意の型の配列 |
戻り値
例外
オーバーロード
クラスおよび列挙型に対して、適切な
end()
メンバ関数を公開していないが反復可能な場合、
end
のカスタムオーバーロードを提供できます。以下のオーバーロードは標準ライブラリによって既に提供されています:
|
(C++11)
|
std::endを特殊化
std::end
(関数テンプレート) |
|
(C++11)
|
std::endを特殊化
std::end
(関数テンプレート) |
|
範囲ベースforループのサポート
(関数) |
|
|
範囲ベース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)
|
範囲の終端を示すセンチネルを返す
(カスタマイゼーションポイントオブジェクト) |
|
(C++20)
|
読み取り専用範囲の終端を示すセンチネルを返す
(カスタマイゼーションポイントオブジェクト) |