Open2

C++配列操作関連の知見

log5log5

vectorによる配列とCの配列のソートについて

C配列の +8 とかのところ、慣れないと(仕組みがわかってないと)「配列と数値、(型が違うのに)足し算しちゃうん...?」ってなってしまう。

(いったん慣れてしまうと早いと思うけど、最初覚えた言語がJavaとかだと戸惑うやつ)

#include <bits/stdc++.h>

using namespace std;

/*
template<typename T>
std::ostream & operator<<(std::ostream & Str, vector<T> const & vec) { ...略 }

std::ostream & operator<<(std::ostream & Str, const int* arr) { ...略 }
*/

int main() {
    int c_arr[8] = {1, 11, 111, 1111, 11111, 111111, 1111111, 11111111};
    sort(c_arr , c_arr + 8, greater<>());
    cout << c_arr << endl;

    vector<int> vec_arr = {1, 11, 111, 1111, 11111, 111111, 1111111, 11111111};
    sort(vec_arr.begin(), vec_arr.end(), greater<>());
    cout << vec_arr << endl;
}

https://atcoder.jp/contests/apg4b/tasks/APG4b_n

log5log5

lower_bound とか

事あるごとに忘れるので書いておく

int main() {
    vector<int> vec_arr = {1, 11, 111, 1111, 11111, 111111, 1111111, 11111111};
    cout << "10000より大きい最初の値: "<< *lower_bound(vec_arr.begin(), vec_arr.end(), 10000) << endl;
    cout << "10000より大きい最初の値の位置: " << distance(vec_arr.begin(), lower_bound(vec_arr.begin(), vec_arr.end(), 10000)) << endl;
}