2013-10-19 21 views
9

aralığından çıkarıldı. Aşağıdaki kod, ilk döngü için vektörü 10 değerle doldurur. Döngü için ikinci olarak vektör elemanlarının basılmasını istiyorum. Çıktı, j döngüsünden önceki cout ifadesine kadardır. Vektör alt simge hatası aralık dışındadır. Ne olursa olsun size endeksi yapmak nasılHata ayıklama işlemi başarısız oldu. C++ vektör alt sınırı

#include "stdafx.h" 
#include "iostream" 
#include "vector" 
using namespace std; 

int _tmain(int argc, _TCHAR* argv[]) 
{ vector<int> v; 

    cout<<"Hello India"<<endl; 
    cout<<"Size of vector is: "<<v.size()<<endl; 
    for(int i=1;i<=10;++i) 
    { 
     v.push_back(i); 

    } 
    cout<<"size of vector: "<<v.size()<<endl; 

    for(int j=10;j>0;--j) 
    { 
     cout<<v[j]; 
    } 

    return 0; 
} 

cevap

8

vektör 0 den endeksli 10 öğeler içeriyor pushbacks (0, 1, ..., 9). Yani ikinci döngüsünde, j10 olduğunda geçersiz.

Bu hatayı düzeltmek olacaktır: o esaslı 0 olarak endeksler düşünmek iyidir Genelde

for(int j = 9;j >= 0;--j) 
{ 
    cout << v[j]; 
} 

, bu yüzden bu da ilk döngü değiştirmek öneririz:

for(int i = 0;i < 10;++i) 
{ 
    v.push_back(i); 
} 
5

v sahiptir 10 öğesi, dizin 0'dan 9'a başlar.

for(int j=10;j>0;--j) 
{ 
    cout<<v[j]; // v[10] out of range 
} 

Eğer ters sırada elemanı yazdırmak için for döngü

için
for(int j=9; j>=0; --j) 
//  ^^^^^^^^^^ 
{ 
    cout<<v[j]; // out of range 
} 

Veya kullanmak ters yineleyici güncelleştirmek gerekir

for (auto ri = v.rbegin(); ri != v.rend(); ++ri) 
{ 
    std::cout << *ri << std::endl; 
} 
İlgili konular