これは非常にばかげた質問だと思いますが、これを明確にしたいと思いました。
1つの文字列ベクトルが次のようになっているとしましょう。
vector<int> vnTemp; // suppose this vector has {1,2,3,4,5}
vector<int>::iterator vn_it;
//Now, I want to print out only 1 to 4.
for(int i=0; i<4; ++i)
cout << vnTemp[i] << endl;
非常に簡単です。しかし、イテレータを使用して同等の結果を出力したい場合はどうすればよいですか?たとえば、
// .. continuing from the code above
for(vn_it = vnTemp.begin(); vn_it != vnTemp.end()-1; ++vn_it)
cout << *it << endl;
もちろん、vnTemp.end()-1
ポインタなのでエラーになります。
この場合のforループに相当するものは何ですか?両方がoptimized(-o)モードでコンパイルされた場合、パフォーマンスに違いはありますか?
編集:
これが実際にで機能することに気づきましたvector
。boost::tokenizer
私がコードを使用していたときに発生した問題は次のとおりです。
typedef boost::tokenizer<boost::char_separator<char> > tokenizer;
boost::char_separator<char> sep("_");
tokenizer::iterator tok_it;
tokenizer tokens(strLine, sep); //strLine is some string line
for(tok_it=tokens.begin(); tok_it != tokens.end(); ++tok_it){
... }
tokens.end()-1
これは元のコードであり、forループで言おうとするとエラーが発生します。
この問題を解決する方法はありますか?あいまいさについて申し訳ありません。