前書き
競技プログラミングを始めるにあたって、c++を始めることにしました。その上で自分のぶち当たった壁と忘れそうなことをメモっていきます。公開してからも随時更新していきますので、いいねでもストックでもしてもらえれば光栄です。
自分がどんな言語をどれだけ扱ってきたかを先に書いておきます。
- c言語・・・半年
- swift・・・1年
- python・・・1年半
- c++・・・new!
こんな感じです
機能
■ ストリーム入出力
変数の型を意識せずに使える入出力機構。
要するにscanfとprintfのc++版
こんな感じ
#include <iostream>
using namespace std;
int a, b;
cin >> a >> b;
cout << a+b << endl;
このプログラムを実行するとcin
で標準入力待ち状態となる。もし、5 2
と入力すると7
と出力される。
■ constについて
変数の宣言にconstをつけることで、その変数の値が書き換えられないようにできる。
こんな感じ
const int max_len = 120;
max_len = 130; //コンパイルエラー
constをつける位置はどっちでもいい
const int value
int const value
でも、ポインタが絡んでくると順番にも気をつけなければならない。
-
*
の前にconstをつけた場合は、ポインタを指している先が不変になる。 -
*
の後にconstをつけた場合は、ポインタ変数そのものが不変になる。
1.の場合
const int* p1 = &value1;
//ポインタ変数そのものを変更することはできるが、
p1 = &value2; //OK
//ポインタ変数が指している実態を変更することはできない。
*p = 10; //NG
2.の場合
int* const p2 = &value1;
// ポインタ変数そのものを変更することはできないが、
p2 = &value2; //NG
// ポインタ変数が指している実態は変更することはできる。
*p2 = 10; //OK
■ 名前空間(namespace)
大規模開発の際に変数名や関数名が衝突してしまうことを避けるための仕組み。
例えば、
namespace Hoge {
int a;
void hello();
}
namespace Geho {
int a;
void hello();
}
と書いて、
Hoge::a=1;
Geho::a=2;
Hoge::hello();
Geho::hello();
と使うと、aとhelloは別として扱われる。
そして、ファイルの先頭などにusing namespace Hoge
と書くとHoge::
を省略することができる。
STL
STLとは、C++の標準ライブラリの一つ。
特に競技プログラミングでは重宝されるらしい。
algorithmとかstackとかqueueとかstringとか...
◆ algorithm
- max(a, b)・・・aとbの大きい方を返す。(minもあるよ。)
int a=10, b=4;
int large = max(a, b) // 10
- swap(a, b)・・・aとbの値を交換する。
int a=10, b=4;
swap(a, b); //aが4でbが10になってる。
- sort(f, t)・・・fからt-1までを昇順ソートする。(fとtは配列のポインタ)
int a[] = {6, 2, 1, 3, 7};
sort(a, a+5) // {1, 2, 3, 6, 7}
降順でしたかったら、
sort(a, a+5, greater<int>());
- reverse(f, t)・・・fからt-1までを反転する。
int a[] = {4, 6, 2, 7, 5}
reverse(a, a+5) // {5, 7, 2, 6, 4}
- count(f, t, x)・・・fからt-1までに含まれるxの数を返す。
int a[] = {2, 4, 7, 3, 6, 7, 7, 1};
int cnt7 = count(a, a+8, 7); // 3
- fill(f, t, x)・・・fからt-1までを全てxで初期化する。
int a[] = {4, 2, 6, 2, 1, 5}
fill(a, a+6, 1); // {1, 1, 1, 1, 1, 1}
他にも便利な関数は色々あります。
equel, find, search, copy, remove, replace, random_shuffle, unique, lower_bound, upper_bound, binary_search, max_element, min_element, next_permutation, などなど...