C++プログラマ キャスブログ
[C++11]イテレータとはおさらばforeach 2014年11月20日07:46:02
コンテナを回すのに長ったらしいイテレータとはもうおさらばです。 C++11からはforeachを使いましょう!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 #include <vector> // std::vectorを使うために必要なヘッダー #include <cstdio> // printfを使うために必要なヘッダー std::vector<int> vec = { 1, 2, 3, 4, 5 }; // イテレータの場合 for( std::vector<int>::iterator i=vec.begin(); i != vec.end(); ++i ) { printf( "%d\n", *i ); } // foreachの場合 // for( 要素の型 : コンテナ ) for( int i : vec ) { printf( "%d\n", i ); }
普通の配列にも使えます。
1 2 3 4 5 6 7 8 #include <cstdio> int arr[] = { 1, 2, 3, 4, 5 }; for( int i : arr ) { printf( "%d\n", i ); }
中身を書き換えるなら参照に
1 2 3 4 5 6 int arr[] = { 1, 2, 3, 4, 5 }; for( int& i : arr ) { i = 0; }
コンテナの中身がオブジェクトの場合は参照をつけておかないと コピーコンストラクタが走るのでご注意を
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #include <string> // std::stringを使うために必要なヘッダー #include <cstdio> // printfを使うために必要なヘッダー std::string arr[] = { "a", "b", "c", "d", "e" }; // コピーコンストラクタが走る残念な事例 for( std::string i : arr ) { printf( "%s\n", i.c_str() ); } // これでOK for( std::string& i : arr ) { printf( "%s\n", i.c_str() ); } // 読み取り専用であればconstを忘れずに for( const std::string& i : arr ) { printf( "%s\n", i.c_str() ); }
カテゴリ

リンク
C++11のコードを
試すのに便利です。
http://ideone.com/

同人ゲームを
製作している知人
sorcery

にほんブログ村 IT技術ブログ C/C++へ
にほんブログ村


C++ ブログランキングへ

ゲームダウンロード DefenceTri