C++ 標準ライブラリまとめ

# ループ
どちらの文にも`break`と`continue`を使える
`break`は使うことでループを即座に終わることができ
`continue`はループの次の処理に行くことができる

例として1〜15で何回3の倍数になるかを数える

```cpp:break continue例
int i = 0;
int count = 0;
while (true) {
    i++;
    if (i % 3 != 0) continue;

    count++;
    if (i == 15) break;
}
cout << count << endl;
```

## while文
条件を満たす限りループをし続ける

```cpp:while文
while (条件式) {
    条件を満たしているときに行う処理
}
```

## for文
for 文は**初期化 条件式 更新**の3つで構成されている
初期化でループする際に使用する変数を定義し
条件式でその変数がどうなったら終わるのかを決め
更新で変数をどう変化させるのかを決める

```cpp:for文
for (int i = 0; i < 10; i++) {
    10回ここで処理が行われる
}
```
一般的にN開ループは以下のように書かれる
```cpp:N回ループ
for (int i = 0; i < N; i++) {
    処理
}
```

# if文
`if`を使用し条件を満たした場合のみ処理を行える
`else`を使うことで満たさなかった場合の処理も可
`else if`なら複数に分けられる
```cpp:if文例
if (条件式1) {
    条件式1を満たす場合の処理
}
else if (条件式2) {
    条件式1を満たさず条件式2を満たす場合の処理
}
else {
    どちらも満たさない場合の処理
}
```

# コンテナ

## string / char
stringには文字列を入れることができる
charはその一文字だけ扱うことができる
charは数字で管理されているため足し引きが可能
stringは"aaa"のような表現で
charは'a'となる
| `string S` | 文字列 |
|:-:|:-:|
| `S.[i]` | 文字列Sのi番目にアクセス  |
| `S.size()` | 文字列Sの長さを取得 |
|   |   |
|   |   |
|   |   |
|   |   |

char型は以下のような数字で管理されている（ASCII
`'0'`は`48`　`'A'`は`65`　'`a`'は`97`で
そこから順番に割り当てられている
（つまり大文字に32を足せば小文字になり
　小文字から32を引けば大文字になる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3796016/070eafd9-588a-4a28-b1e3-549897938b65.png)



# 入出力

## 入力
`cin`以降に`>>`をつけて変数に代入する

```cpp:cin
cin >> A >> B;
```

空白などで区切らず行単位で入力を受け取りたい場合
`getline`を使用する
以下のように用いる

```cpp:getline
string S;
getline(cin, S);
```


## 出力
`cout`を使用する
`cout`以降に`<<`を用いて出力したいものを書く
数字や変数はそのまま書けるが文字列は`""`で囲うこと
行替えの場合は`endl`を使用することができる
```cpp:出力例
cout << Sum << 777 << "Banana" << endl;
```

# コメント
一行の場合は`//`のあとに記述したものはコードとして認知されない
複数行記述する場合は`/*` `*/`で囲めば良い

```cpp:コメント例
//コメント
/*複数行
コメントとして
認識されます*/
```
また、最近気づいたこととして`//*/`とするとコメントアウトがかなり楽になる
```cpp:コメントアウト例
// 複数行コメント化されていない場合は無視される
//*/

/* 複数行コメント化している場合は コメントを閉じてくれる
//*/
```

# 変数の型
| 型 | 種類 |
|:-:|:-:|
| `bool` | 真偽 |
| `int` | 整数 |
| `double` | 少数 |
| `string` | 文字列 |
| `char` | 文字|

変数はスコープ (`{}`の中)でしか使用できないことに注意

# エスケープシーケンス
| エスケープシーケンス | 意味 |
|:-:|:-:|
| \" | `"` 二重引用符 |
| \' | `'` 引用符 |
| \\ | `\` バックスラッシュ |
| \t | タブ |
| \r | 復帰 |

# 演算子

## 優先順位
 <table>
    <tr>
      <td>＊ 掛け算</td>
      <td>／ 割り算</td>
      <td>％ 割り算</td>
    </tr>
    <tr>
      <td>＋ 足し算</td>
      <td>ー 引き算</td>
    </tr>
 </table>

## 四則演算
|演算子|意味|
|:-:|:-:|
| `+` | 足し算 |
| `-` | 引き算 |
| `*` | 掛け算 |
| `/` | 割り算 |
| `%` | あまり |

int型の場合割り算を行った時点で切り捨てられるので注意
0で割ってはいけない

## 複合代入演算子
よくある形の場合、短く書くことができる場合もある
特に`x = x + 1`は`x++`とされ、インクリメント
`x = x - 1`は`x--`とされ、デクリメントと呼ばれる

| もとの文 | 書き換え |
|:-:|:-:|
| `x = x + y` | `x += y` |
| `x = x - y` | `x -= y` |
| `x = x * y` | `x *= y` |
| `x = x / y` | `x /= y` |
| `x = x % y` | `x %= y` |
| `x += 1` | `x++` |
| `x -= 1` | `x--` |

## 比較演算子
| 演算子 | 意味 |
|:-:|:-:|
| `x == y` | xとyは等しい |
| `x != y` | xとyは等しくない |
| `x >  y` | xはyより大きい |
| `x <  y` | xはyより小さい |
| `x >= y` | xはy以上 |
| `x <= y` | xはy以下 |

bool型のため満たせば1でなければ0ともみなせる

## 論理演算子
| 演算子 | 意味 |
|:-:|:-:|
| `!(条件式)` | NOT 結果を反転 |
| `条件式1 && 条件式2` | AND 両方満たす場合のみ真 |
| `条件式1 \|\| 条件式2` | OR どちらかが満たせば真 |

# 使用サイト

https://atcoder.jp/contests/apg4b

APG4b 1.00-1.12

***

ちょっとずつ更新します