ホームに戻る
max_element、min_element、upper_bound、lower_bound
//max_elementは要素中の最大の値へのイテレータを返す。
//最大値が複数あるときには先頭から最初の要素を返す。
vector<int>::iterator itr = max_element(v.begin(),v.end());
// itr は cout << itr << endl; とはできない。
// 必ず v.begin() などとの差をとってやる。
cout << itr - v.begin() << endl;
// 最大値の取得
int mx = *max_elemnt(v.begin(),v.end());
// lower_bound() の挙動
vector v;
v.pb(11); // 0
v.pb(13); // 1
v.pb(15); // 2
v.pb(15); // 3
v.pb(15); // 4
v.pb(15); // 5
v.pb(16); // 6
v.pb(17); // 7
sort(all(v)); // ソートを忘れずに!
for(int i = 10; i < 20; i++){
vector<ll>::iterator itr = lower_bound(all(v),i);
cout << i << ":" << itr - v.begin() << " " << v[itr - v.begin()] << endl;
}
// 出力
10:0 11
11:0 11
12:1 13
13:1 13
14:2 15
15:2 15
16:6 16
17:7 17
18:8 0
19:8 0
// upper_bound() の挙動
vector v;
v.pb(11); // 0
v.pb(13); // 1
v.pb(15); // 2
v.pb(15); // 3
v.pb(15); // 4
v.pb(15); // 5
v.pb(16); // 6
v.pb(17); // 7
sort(all(v)); // ソートを忘れずに!
for(int i = 10; i < 20; i++){
vector<ll>::iterator itr = upper_bound(all(v),i);
cout << i << ":" << itr - v.begin() << " " << v[itr - v.begin()] << endl;
}
// 出力
10:0 11
11:1 13
12:1 13
13:2 15
14:2 15
15:6 16
16:7 17
17:8 0
18:8 0
19:8 0