2016-03-26 7 views
0

最初のものから次のもの、次のもの、次のもの、3番目のもの、3番目のもの、そして次のもののベクトルまで要素を表示するループを作りたい最後の一つ。しかし、私はこれを実行すると、範囲外のベクトル添え字を言うエラーがポップアップします...アドバイスをお願いします 私は初心者です。このベクトルコーディングで何が問題になっていますか?(初心者)

for (int i = 0; i < vecB.size(); i++) 
{ 
    cout << vecB[i]; cout << " "; cout << vecB[i + 1]; 
} 
+0

どのようにしてベクトルを初期化しましたか?何が入ってるの? – mwm314

答えて

5

vecB.size()がある場合は、例えば5、その後、ループの最後の繰り返しで、iこれはあなたのforループの最後の繰り返しで、iの最後の値になります4.になります。今、このループの本体取る:

cout << vecB[i]; cout << " "; cout << vecB[i + 1]; 

をそしてここで、ベクトルの参照のいずれかが範囲外であるかどうか、鉛筆で紙を使用して、把握してみてください。 vecBには、5つの要素、vecB[0]vecB[4]が含まれています。そして、私が説明したように、iは4になります。

クロックはになりましたになります。

あなたが最後の項目とエラーので、存在しない、それの後に1を表示するループの最後の反復で
1

0

はのはvecB.size() == 3

を想像してみましょうとのループを通過してみましょう:

for (int i = 0; i != vecB.size(); ++i) 
    cout << vecB.at(i) << " " << vecB.at(i + 1); 
    //    0      1 

for (int i = 0; i != vecB.size(); ++i) 
    cout << vecB.at(i) << " " << vecB.at(i + 1); 
    //    1      2 

for (int i = 0; i != vecB.size(); ++i) 
    cout << vecB.at(i) << " " << vecB.at(i + 1); 
    //    2      3! out of range! 

あなたは​​をチェックすることにより、この問題を解決することができます:

for (int i = 0; i != v.size() - 1; ++i) 
    cout << v.at(i) << " " << v.at(i + 1) << '\n'; 
関連する問題