モダンC++erになりたい! (C++11編)
こんな記事がバズっている昨今。。。 (ワイ、C++初心者や…。)
そろそろモダンC++erにならないといけないと思い立ち、いろいろと勉強。
とりあえずはC++11まわりの記述を中心に備忘録的にまとめようかと。
※ (C++11) って書いてあるヤツがC++11から登場した機能。
コンテナ
ポイント:
- 配列とか割と面倒なことが多いのでコンテナを積極的に使う。
array (C++11)
vector
unordered_map (C++11)
auto と range based for
ポイント:
- auto を使うと型を推論してくれるので、ながったらしいクラス名などを省略できる。
- range based for を使うとイテレーターを使ったループの記述がラクになる。
auto (C++11)
range based for (C++11)
スマートポインタ
ポイント:
- 生のポインタは領域破棄のしどころが難しいため、必要がなくなった際に自動で破棄してくれるスマートポインタを用いる。
- auto_ptr はコピーによる所有権移動に問題があるため、C++11からは非推奨。
- unique_ptr は参照元が 1つの場合に用いる。(というかそれ以上扱えない仕組みになってる)
- shared_ptr は参照元が複数になる場合に用いる。
- weak_ptr は shared_ptr で管理している領域を管理対象にならずに参照したい場合に用いる。
- nullptr が使えるようになった
unique_ptr (C++11)
- NG例
shared_ptr (C++11)
- unique_ptr との違い
- NG例
weak_ptr (C++11)
- weak_ptr での参照の仕方
nullptr (C++11)
function、ラムダ式
ポイント:
function (C++11)
ラムダ式 (C++11)
- 基礎編
- キャプチャについて
- 高階関数の使用例
Boost.Range とか使うともうちょっと直感的に書けるみたいだけど、一応関数型言語の真似事的なこともできる。