2013-10-19 105 views
9

以下代碼在第一個for循環中用10個值填充向量。在第二個循環中,我想要打印矢量元素。 輸出到j循環之前的cout語句。給出向量下標超出範圍的錯誤。調試斷言失敗。 C++向量下標超出範圍

#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; 
} 

回答

8

不管你怎麼索引你的載體包含0收錄10種元素的回送(01,...,9)。所以在你的第二個循環v[j]是無效的,當j10

這將修復錯誤:

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

一般來說,最好考慮一下基於指數爲0,所以我建議你也改變你的第一個循環,這樣的:

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

v10元素,索引從0開始到9

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

您應該更新for環路

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

或者使用反向迭代以相反的順序打印元素

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