Open7

vector

ピン留めされたアイテム
shonsukeeshonsukee

vectorの初期化,代入,取得,削除

初期化

vector<int> v;
vector<int> data(123); // 要素数123
vector<int> data(10, 5); // 要素数10、全ての要素の値5 で初期化
vector<vector<int>> arr(5, vector<int>(5)); // 5×5の二次元配列

※stringの時は,二次元配列にしなくても一次元配列で(arr[i][j]に)アクセス可!

挿入

  • 途中に挿入
vector<int> arr(n);
p=arr.begin();
p++;
arr.insert(p, 2); // arrの[1]に2を挿入
  • 最後に挿入
vector<int> ans;
for(auto i : vec) if(c[i] == cmin) ans.push_back(i);

取得

  • 最大・最小値を取得
*max_element(v.begin(), v.end());
*min_element(v.begin(), v.end());

auto iter = max_element(v.begin(), v.end);
cout<<*iter<<endl;
  • 要素数
int length=v.size();
  • 計算
accumulate(v.begin(), v.end(), 0); // 総和を計算
  • ソート
sort(v.begin(), v.end()); // 昇順ソート
sort(v.rbegin(), v.rend()); // 降順ソート
  • 最初,最後
v.first()
v.back()

削除

  • 最後の要素を削除
v.pop_back();
  • 要素番号で削除
v.erase(v.begin() + 1); // 要素番号を指定して削除

v.erase(v.begin(), v.begin() + 2); // 連続要素を削除, ex)[0, 1, 2, 3]->[2, 3]
  • 値が一致する要素を削除
    ex)2を全て削除
    ※removeは削除しない要素の配列の次を返す(?)からそこから配列の最後をeraseで削除する!
v.erase(remove(v.begin(), v.end(), 2), v.end());
shonsukeeshonsukee

多次元配列を動的に作成!

aを一次元配列から2次元配列へ動的に作成する!

int n, x, c[101];
vector<int> a[101]; // まず一次元配列作成
    
cin >> n; // nを取得
for(int i = 1; i <= n; i++){
    cin >> c[i]; // cを取得
    a[i].resize(c[i]); // cの数だけa[i]のサイズを拡張,これによって多次元配列に!
    for(int j = 0; j < c[i]; j++) cin >> a[i][j]; // 多次元配列に格納していく
}
shonsukeeshonsukee

最大公約数と最小公倍数

gcd

gcd(100, 150); // 100,150の最大公約数を返す

int gcd(int a, int b) {
    if (b==0) return a;
    return gcd(b, a%b);
}

lcm

int lcm(int a, int b) {
    return (a * b) / gcd(a, b);
}
shonsukeeshonsukee

異なる型を挿入

今回はintとintの配列を持った型を定義!
ex)
10000 2 1 3
2->後ろに2つの整数が続くという意味

    int N, M;
    cin >> N >> M;
    vector<pair<int, vector<int>>> products(N);
    for (auto &&[price, feature] : products) {
        cin >> price;
        int K;
        cin >> K;
        feature = vector<int>(K);
        for (auto &&f : feature)
            cin >> f;
    }
shonsukeeshonsukee

int

  • int の桁数
int num = 10000;
string temp = to_string(num);
temp.length();

累乗

int num = pow(x, 2); // xの2乗