2016-03-26 12 views
0

Vektörlerdeki elemanların birinciden diğerine, ikincisine, diğerine, birincisine, diğerine ve diğerine kadar bir döngü oluşturmak istiyorum. sonuncusu Ancak, bunu çalıştırdığımda hata, vektör altbilgisini aralık dışı derken açılır ... herhangi bir öneri lütfen Yeni başladım. vecB.size() iseBu vektörün kodlamasının nesi yanlış? (Acemi)

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

Vektörü nasıl başlattın? İçinde ne var? – mwm314

cevap

5

, örneğin 5, sonra döngünün son tekrarında, i Bu for döngünün son tekrarında, i son değeri olacaktır 4. olacaktır.

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

Ve burada vektör referansların herhangi aralığının dışında olup olmayacağını, kalem kağıt kullanarak anlamaya çalışalım: Artık bu döngünün gövdesini alır. Unutmayın, vecB, vecB[4] aracılığıyla vecB[0] olmak üzere beş öğe içerir. Açıkladığım gibi, i,

Saat şimdi.

Son öğeyi ve hata dolayısıyla yok bunun ardına görüntülemek döngünün son denemede
1

0

en vecB.size() == 3

düşünelim Ve en döngü geçelim:

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! 

Sen i != vecB.size() - 1 denetleyerek çözeriz diye:

for (int i = 0; i != v.size() - 1; ++i) 
    cout << v.at(i) << " " << v.at(i + 1) << '\n';