C++プログラマ キャスブログ
[C++11]auto変数とconst_iterator 2014年12月12日22:30:43
自動で型推論をしてくれるauto変数ですがイテレータを扱う時には注意が必要です。 auto変数はconst_iteratorなのか普通のiteratorか判別がつかないので 普通にbeginを書くとconst_iteratorにはなりません。 そこでC++11から追加されたcbeginを使えばconst_iteratorを返してくれます。 終端のconst_iteratorはcendです。普通に回す分には今まで通りendで問題ありません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <cstdio> // printfに必要なヘッダー #include <array> //std::arrayに必要なヘッダー int main() { std::array<int,5> arr = { 1, 2, 3, 4, 5 }; auto ite1 = arr.begin(); // iterator auto ite2 = arr.cbegin(); // const_iterator printf( "%s\n", typeid(ite1).name() ); printf( "%s\n", typeid(ite2).name() ); return 0; }
出力: class std::_Array_iterator class std::_Array_const_iterator
const_iteratorを利用したループの書き方 ※単純にループするだけならforeachをオススメします。 イテレータは削除や挿入が必要な場合に利用するのがいいと思います。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 #include <cstdio> // printfに必要なヘッダー #include <array> //std::arrayに必要なヘッダー int main() { std::array<int,5> arr = { 1, 2, 3, 4, 5 }; // ite != arr.end()でも動きます。 for( auto ite=arr.cbegin(); ite != arr.cend(); ++ite ) { printf( "%d\n", *ite ); } return 0; }
auto変数についての説明はこちら [C++11]auto変数を使おう!ただし慎重に... foreachについての説明はこちら [C++11]イテレータとはおさらばforeach
カテゴリ

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

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

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


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

ゲームダウンロード DefenceTri