我一直在努力学习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。
答案 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] << " ";
}
编辑:我迟到了。