vector :: erase不会擦除所需的元素,而是擦除向量中的最后一个元素

时间:2014-10-19 20:41:56

标签: c++ mingw erase

我一直在努力学习c ++,但现在我遇到了一个让我感到困惑的问题。问题是当我尝试从矢量中擦除元素时,擦除功能不会擦除我想要擦除的元素,而是擦除矢量中的最后一个元素。我用这段代码重新创建了这个问题,这样我就可以比我的整个代码更容易理解我的问题:

#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。

3 个答案:

答案 0 :(得分:9)

删除后,不打印矢量的内容,只打印循环变量。

只需用

替换cout部分即可
for (int i=0;i<c.size();i++) {
    std::cout << c[i] << " ";
   }

它将按预期工作。

答案 1 :(得分: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) << " ";
}

答案 2 :(得分:0)

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

应该是:

for (int i=0;i<c.size();i++) {
    std::cout << c[i] << " ";
}
编辑:我迟到了。