2013-10-19 65 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; 
}