GeezerVison is showing cpprefjp.github.io — std::ranges::ends_with - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月11日 13時06分31秒 (JST)
Akira Takahashi
が更新
履歴
編集
function template
<algorithm>
std::ranges:: ends_with (C++23)
namespace std :: ranges {
template < input_iterator I1 ,
sentinel_for < I1 > S1 ,
input_iterator I2 ,
sentinel_for < I2 > S2 ,
class Pred = ranges::equal_to ,
class Proj1 = identity ,
class Proj2 = identity >
requires ( forward_iterator < I1 > || sized_sentinel_for < S1 , I1 > ) &&
( forward_iterator < I2 > || sized_sentinel_for < S2 , I2 > ) &&
indirectly_comparable < I1 , I2 , Pred , Proj1 , Proj2 >
constexpr bool
ends_with ( I1 first1 ,
S1 last1 ,
I2 first2 ,
S2 last2 ,
Pred pred = {},
Proj1 proj1 = {},
Proj2 proj2 = {}); // (1) C++23
template < input_range R1 ,
input_range R2 ,
class Pred = ranges::equal_to ,
class Proj1 = identity ,
class Proj2 = identity >
requires ( forward_range < R1 > || sized_range < R1 > ) &&
( forward_range < R2 > || sized_range < R2 > ) &&
indirectly_comparable < iterator_t < R1 > , iterator_t < R2 > , Pred , Proj1 , Proj2 >
constexpr bool
ends_with ( R1 && r1 ,
R2 && r2 ,
Pred pred = {},
Proj1 proj1 = {},
Proj2 proj2 = {}); // (2) C++23
template < execution-policy Ep ,
random_access_iterator I1 ,
sized_sentinel_for < I1 > S1 ,
random_access_iterator I2 ,
sized_sentinel_for < I2 > S2 ,
class Pred = ranges::equal_to ,
class Proj1 = identity ,
class Proj2 = identity >
requires indirectly_comparable < I1 , I2 , Pred , Proj1 , Proj2 >
bool
ends_with ( Ep && exec ,
I1 first1 ,
S1 last1 ,
I2 first2 ,
S2 last2 ,
Pred pred = {},
Proj1 proj1 = {},
Proj2 proj2 = {}); // (3) C++26
template < execution-policy Ep ,
sized-random-access-range R1 ,
sized-random-access-range R2 ,
class Pred = ranges::equal_to ,
class Proj1 = identity ,
class Proj2 = identity >
requires indirectly_comparable < iterator_t < R1 > , iterator_t < R2 > , Pred , Proj1 , Proj2 >
bool
ends_with ( Ep && exec ,
R1 && r1 ,
R2 && r2 ,
Pred pred = {},
Proj1 proj1 = {},
Proj2 proj2 = {}); // (4) C++26
}
概要
シーケンスの末尾が指定されたシーケンスと一致するかを調べる
(1): イテレータ範囲を指定する
(2): Rangeを直接指定する
(3): (1)の並列アルゴリズム版。実行ポリシーを指定する
(4): (2)の並列アルゴリズム版。実行ポリシーを指定する
戻り値
(1):
N1 = last1 - first1, N2 = last2 - first2 とする。
N1 < N2 のとき、false
それ以外のとき、ranges::equal (std::move (first1) + (N1 - N2), last1, std::move (first2), last2, pred, proj1, proj2)
(2):
計算量
最大で N2 回の対応する述語が適用される。
例
基本的な使い方
#include <algorithm>
#include <iostream>
#include <vector>
int main () {
const std::vector v = { 1 , 2 , 3 , 4 , 5 , 6 };
const std::vector v1 = { 1 , 2 , 3 };
const std::vector v2 = { 4 , 5 , 6 };
std::cout << std::ranges::ends_with ( v1 , v ) << std::endl ;
std::cout << std::ranges::ends_with ( v , v1 ) << std::endl ;
std::cout << std::ranges::ends_with ( v , v2 ) << std::endl ;
}
出力
0
0
1
並列アルゴリズムの例 (C++26)
出力
true
実装例
struct ends_with_impl {
template < input_iterator I1 , sentinel_for < I1 > S1 , input_iterator I2 , sentinel_for < I2 > S2 , class Pred = ranges::equal_to , class Proj1 = identity , class Proj2 = identity >
requires ( forward_iterator < I1 > || sized_sentinel_for < S1 , I1 > ) &&
( forward_iterator < I2 > || sized_sentinel_for < S2 , I2 > ) &&
indirectly_comparable < I1 , I2 , Pred , Proj1 , Proj2 >
constexpr bool operator ()( I1 first1 , S1 last1 , I2 first2 , S2 last2 , Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) const {
const auto N1 = distance ( first1 , last1 );
const auto N2 = distance ( first2 , last2 );
return N1 < N2 ? false :
equal ( move ( first1 ) + ( N1 - N2 ), last1 , move ( first2 ), last2 , pred , proj1 , proj2 );
}
template < input_range R1 , input_range R2 , class Pred = ranges::equal_to , class Proj1 = identity , class Proj2 = identity >
requires ( forward_range < R1 > || sized_range < R1 > ) &&
( forward_range < R2 > || sized_range < R2 > ) &&
indirectly_comparable < iterator_t < R1 > , iterator_t < R2 > , Pred , Proj1 , Proj2 >
constexpr bool operator ()( R1 && r1 , R2 && r2 , Pred pred = {}, Proj1 proj1 = {}, Proj2 proj2 = {}) const {
const auto N1 = distance ( r1 );
const auto N2 = distance ( r2 );
return N1 < N2 ? false :
equal ( drop_view ( ref_view ( r1 ), N1 - N2 ), r2 , pred , proj1 , proj2 );
}
};
inline constexpr ends_with_impl ends_with ;
バージョン
言語
処理系
参照