2014-10-19 111 views
3

我一直在學習C++,但現在我遇到了一個令我困惑的問題。問題是,當我嘗試擦除矢量中的元素時,擦除功能不會擦除我想擦除的元素,而是擦除矢量中的最後一個元素。我重建問題與這一段代碼,使其更容易理解我的問題比起來,我的整個代碼:vector :: erase不會擦除所需的元素,而是會擦除矢量中的最後一個元素

#include <vector> 
#include <iostream> 

int main() 
{ 
    std::vector<int> c; 
    for(int i=0; i<=10; i++){ 
     c.push_back(i); 
    } 

    for (int i=0;i<c.size();i++) { 
     std::cout << i << " "; 
    } 
    std::cout << '\n'; 

    c.erase(c.begin()+2); 

    for (int i=0;i<c.size();i++) { 
     std::cout << i << " "; 
    } 
    std::cout << '\n'; 

    c.erase(c.begin()+2, c.begin()+5); 

    for (int i=0;i<c.size();i++) { 
     std::cout << i << " "; 
    } 
    std::cout << '\n'; 

} 

結果不是預期的:

0 1 2 3 4 5 6 7 8 9 10 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 

時我認爲結果會是

0 1 2 3 4 5 6 7 8 9 10 
0 1 3 4 5 6 7 8 9 10 
0 1 2 7 8 9 10 

我在做一些完全錯誤的事情嗎?或者爲什麼這樣做不像我想的那樣工作? 如果它是相關的,我使用MinGW編譯器的Windows。

回答

9

刪除後,您不打印矢量的內容,而只打印循環變量。

通過

for (int i=0;i<c.size();i++) { 
    std::cout << c[i] << " "; 
    } 

只需更換您的cout部分並根據需要將工作。

+0

是的,當然。感謝您的快速回復! – Tuotau 2014-10-19 20:52:21

+0

嗯,我沒有在我的實際代碼中犯同樣的錯誤。我應該編輯問題來包含有問題的部分形式,我的實際代碼,或再次詢問?對不起,使這個複雜.. – Tuotau 2014-10-19 20:54:59

+0

關於你的問題,我只知道[這個彙編](http://meta.codereview.stackexchange.com/questions/1763/for-an-iterative-review-is-it-okay-編輯我自己的問題包括修訂c/1765#1765)這聽起來合理的我。之後,你應該問一個新的問題。 – davidhigh 2014-10-19 20:57:29

1

您打印循環變量,而不是矢量的內容。對於所有實例:

變化

for (int i=0;i<c.size();i++) { 
    std::cout << i << " "; 
} 

for (int i=0;i<c.size();i++) { 
    std::cout << c.at(i) << " "; 
} 
0
for (int i=0;i<c.size();i++) { 
    std::cout << i << " "; 
} 

應該是:

for (int i=0;i<c.size();i++) { 
    std::cout << c[i] << " "; 
} 

編輯:我來晚了。