2014-10-19 69 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] << " "; 
} 

编辑:我来晚了。