2014-01-05 24 views
-2

我尝试制作一个从1到100的结果数字的数字列表;例如,123456789101112 .....但是,当我打印出list_result的结果时;我的list_result向量中有一些奇怪的数字。这里下面的代码:数据存储在C++中的向量中的错误

int main() 
{ 
vector<int> list_num; 
vector<int> list_result; 
int count =0; 
for(int index = 1; index<=100; index++) 
{ 
    count = index; 
    if(index<10) 
    { 
     list_result.push_back(index); 
    } 
    else 
    { 
     while(count!=0) 
     { 
      list_num.push_back(count%10); 
      count=count/10; 
     } 
     for(int i=0; i<=list_num.size();i++) 
     { 
      list_result.push_back(list_num[list_num.size()-i]); 
     } 
     list_num.clear(); 
    } 

for(int i = 0; i<=list_result.size(); i++) 
{ 
    cout<<list_result[i]; 
} 
} 
return 0; 
} 

任何人有什么想法?谢谢,

+0

你看到了什么奇怪的输出?你能把它包含在问题中吗? – Dan

+1

编译所有警告(例如'g ++ -Wall -g')并学习**使用调试器**(例如'gdb') –

回答

2

您的程序展示未定义的行为。

for(int i=0; i<=list_num.size();i++) 
    { 
     list_result.push_back(list_num[list_num.size()-i]); 
    } 

有效索引到list_num通过list_num.size()-1是0。然而,在此循环的第一次迭代中,当您尝试访问list_num[list_num.size()]i == 0。没有这样的元素。

0

Igor Tandetnik在else块内的for循环中描述了一个问题,但我已经确定了另一个问题,这次是在程序的输出阶段。

请记住,索引是从零开始的,这意味着它们从零到零件数减去一个vector::size()返回元素的总数,在这种情况下为100.因为您使用小于或等于不等式将该值与索引进行比较,您最终会尝试在循环的最终迭代中访问元素100,由于有效索引的范围是0到99,因此元素100不存在。在编写循环遍历数组或向量的循环时,应始终使用严格不等式将索引与数组/向量大小进行比较。

在最后for循环,具有严格<比较更换<=,使停靠在实际的最后一个元素,而不是算账:

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

Wikipedia有这个共同的容易理解的解释编程错误,称为错过了一个错误