よく出来る人からC++11 についても知っておくべし、とのことだったので。
www.slideshare.net
全て資料からの引用です。
auto の活用
//C++98 vector<int>::iterator i = max_element(v.begin(),v.end()); map<string,pair<int,string>>::iterator k = m.find("key"); //C++11 const auto x = 5; // const int vector<vector<int>> vv(10); auto a = vv[0]; // vector<int> auto& b = vv[0]; // vector<int>& const auto& c = vv[0]; // const vector<int>&
size_t x = count_if(v.begin(),v.end(), [](int n){ return n%2==0; }); //[] () ->T {} で構成される //[] キャプチャリスト //() 引数 //->T 戻り値の型(省略可) {} 関数の本体 const int ar[4] = { 1, 2, 3, 4 }; const int x = 10; for_each(begin(ar),end(ar), [=](int n){ cout << n*x << ' '; }); // [=] により、ラムダ式内の x は // 外部からコピーキャプチャ // 10 20 30 40 const int ar[4] = { 1, 2, 3, 4 }; int sum = 0; for_each(begin(ar),end(ar), [&](int n){ sum += n; }); // [&] により、ラムダ式内の sum は // 外部から参照キャプチャ vector<Vec2> pts; // 原点に近い順にソート sort(pts.begin(),pts.end(), [](const Vec2& a, const Vec2& b) { return a.lengthSq()<b.lengthSq(); } ); vector<Enemy> enemies; int threshold = 20; // HP が threshold 未満の敵を削除 enemies.erase( remove_if( enemies.begin(),enemies.end(), [=](const Enemy& enemy) { return enemy.hp < threshold; } ), enemies.end() );
Thanks!