C++ のイテレータは演算ができますが、例えば以下のようなコードを書くと、簡単に無限ループになってしまいます。
cpp
1#include <vector> 2#include <iostream> 3 4int main() 5{ 6 std::vector<int> a = {1, 2, 3}; 7 for (auto it = a.begin(); it != a.end(); std::advance(it, 2)) { 8 std::cout << *it << std::endl; 9 } 10 return 0; 11}
原因は、イテレータ演算を安全に扱う方法が無いせいだと思うのですが、普通はどのように行うのでしょうか。
つまり、
- イテレータが範囲外の位置を指しているかどうかを判定する方法が無い
- イテレータが範囲外の位置を指さないように演算する方法が無い
ということが原因だと思うのですが、これらをイテレータの機能で解決する方法はありますか?
それとも、範囲外にならないようにプログラマーが気をつけてコーディングするしか回避方法がないのでしょうか。
回答4件
良いと思った回答にはグッドを送りましょう。
グッドが多くついた回答ほどページの上位に表示されるので、他の人が素晴らしい回答を見つけやすくなります。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2016/10/04 11:37
2016/10/04 12:39
2016/10/05 11:44
2016/10/05 13:47 編集