>>25
・shared_ptr(new T())はmake_shared<T>()で置き換えられる。
特に、Tのコンストラクタが例外を発生しうるなら常に置き換えるべき。
・vector同士の代入はその時点での配列のコピーになるからvector自体もshared_ptrで管理するべき。
C2にC1のリストを渡した後でC1が更新されると不整合が起こる。
・ラムダ式の引数の型にはauto系が使える。
幾つかの例外を除けば、型名としてはauto&&を使うのが楽。
・計算式に複数の副作用を含むべきではない。評価順序によって値が変わる可能性がある。
・listC2の要素数が1つでない場合にlistC1の更新が誤ったものになっている。

以上をてきとーに直すとこんな感じ。誰か追加の添削よろ
http://ideone.com/AUc7NI