簡単なC++11まとめ

とりあえず自分が触ったものだけ

配列について

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からの移植なので省略します。

一応、以上