Pythonメインでやってきましたが,C++でもできるようになりたいと思い始めました.
主な理由は以下:
- 順序付集合など,Pythonが苦手とする処理がある(順序付集合 - 競プロはじめました)
- C++のコードが読めるようになると,参考にできる情報の幅が広がる(例えば蟻本はC++)
コンテストのたびに,できるだけC++版でもコードを書くようにして身につけたいと思います.
はじめのうちは,基本的な事項をこのページにメモしていこうと思います.以下のC++版のイメージ:AtCoder - 解法パターンの整理 - 競プロはじめました
参考
入力
変数で受け取る
A B
#include <bits/stdc++.h> using namespace std; int main() { int A, B; cin >> A >> B; }
配列で受け取る
N A1 A2 ... AN
#include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; vector<int> A(N); for (int i = 0; i < N; i++) { cin >> A.at(i); } }
出力
数値型
【参考】long long型
int型は20億(2 * 10^9)くらいまで.それより大きな値はint64_t型を使う.整数の末尾に
LL
をつけるとint64_t型になる.宣言は例えば次のようにする.
#include <bits/stdc++.h> using namespace std; using ll = long long; int main() { int n; ll k; cin >> n >> k; }
配列
【参考】初期化
1次元の場合はvector<要素の型> 変数名(要素数, 初期値)
.初期値を省略すると,intの場合は全ての要素が0で初期化される.
vector<int> vec(3);
は次とほとんど同じ意味になる.
vector<int> vec = {0, 0, 0};
多次元
1次元の要素をvectorにすれば2次元配列になる.- 1次元:
vector<要素の型> 変数名(要素数, 初期値)
- 2次元:↑の「
要素の型
→vector<要素の型>
」,↑の「初期値
→vector<要素の型>(要素数, 初期値)
」
降順ソート
#include <bits/stdc++.h> using namespace std; int main() { vector<int> vec = {2, 5, 2, 1}; sort(vec.begin(), vec.end()); // {1, 2, 2, 5} reverse(vec.begin(), vec.end()); // {5, 2, 2, 1} } }
範囲for文
#include <bits/stdc++.h> using namespace std; int main() { vector<int> a = {1, 3, 2, 5}; for (int x : a) { cout << x << endl; } }
文字列
範囲for文
#include <bits/stdc++.h> using namespace std; int main() { string str = "hello"; for (char c : str) { cout << c << endl; } }