とりあえず自分が触ったものだけ
配列について
int main(void){ std::array<int,5> data1 = {1,2,3,4,5}; std::array<std::string, 2> data2 = { {std::string("aaaa"), "bbbb"} }; return 0; }
foreachについて
int main(void){ std::vector<int> ve; std::array<int,5> a = {1,2,3,4,5}; std::for_each(a.begin(),a.end(), ....); std::for_each(begin(a),end(a), ....); return 0; }
.... はなんらかの処理
foreach(.NET)にはできなくてC++11ではできること
結構これは便利かも
range-based forと呼ばれる形です。
int main(void){ std::vector<int> ve; for(int& item:v){ ++item; } return 0; }
型推論
autoを使います
int main(void){ std::vector<int> ve; for(auto ite = ve.begin();iter!=ve.end();iter++){ std::cout << *iter << std::endl; } return 0; }
ラムダ式
関数オブジェクトをその場で定義します
int main(void){ std::vector<int> ve; std::for_each(ve.begin(),ve.end(),[](int item)){ std::cout << item << std::endl; } return 0; }
またstateless lambdaは関数ポインタに暗黙変換できます コールバックに便利
thread
主に使うもの
#include<thread> #include<future> #include<mutex> #include<atomic>
asyncは非同期です
mutex 排他制御
ではmutexとatomicの違いとは?
atomicはmutexの小スケール版です。なのでハンドルをもちません!
asyncについて
future<int> f = async([](int x, int y) { return x+y;}, 1, 2); cout << f.get() << endl; // スレッドの終了を待ち、結果を取り出す
これは型推論可能です。
auto f = async([](int x, int y) { return x+y;}, 1, 2); cout << f.get() << endl; // スレッドの終了を待ち、結果を取り出す
また
auto plus = [](int x, int y) { return x+y;}; cout << async(plus,1,2).get() << endl; // スレッドの終了を待ち、結果を取り出す
と書き直せます。
あとはboostの時と同じかと思います。
またshared_ptr等もboostからの移植なので省略します。
一応、以上