2014-01-05 26 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有這個共同的容易理解的解釋編程錯誤,稱爲錯過了一個錯誤