poipoiです。

技術的ななにかと、そうじゃないなにか。

モダンC++erになりたい! (C++11編)

qiita.com

こんな記事がバズっている昨今。。。 (ワイ、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 で関数を扱えるようになった
  • ラムダ式を扱えるようになり無名関数・クロージャが使用できるようになった

function (C++11)

ラムダ式 (C++11)

  • 基礎編
  • キャプチャについて

Boost.Range とか使うともうちょっと直感的に書けるみたいだけど、一応関数型言語の真似事的なこともできる。