Namespaces
Variants

std:: end, std:: cend

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
(C++11) (C++14)
(C++14) (C++14)
end cend
(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 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 ( /* 下記参照 */ )

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

指定された範囲の終端(すなわち、最後の要素の次の要素)へのイテレータを返します。

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

range-begin-end.svg

目次

パラメータ

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

戻り値

1,2) c. end ( )
3) array + N
4) c. end ( )

例外

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

オーバーロード

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

std::endを特殊化 std::end
(関数テンプレート)
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);
}

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

(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)
コンテナまたは配列の先頭を指すイテレータを返す
(関数テンプレート)
範囲の終端を示すセンチネルを返す
(カスタマイゼーションポイントオブジェクト)
読み取り専用範囲の終端を示すセンチネルを返す
(カスタマイゼーションポイントオブジェクト)