vector::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'; }

vector::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'; },c++,mingw,erase,C++,Mingw,Erase,当我以为结果会是 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 我是否做了一些完全错误的事情,或者为什么这不能像我想的那样工作? 如果相关,我将使用windows的MinGW编译器。删除后,您不会打印向量的内容,而只打印循环变量 只需将cout部分替换为 for (int i=0;i<c.size();i++) { std::cout << c[i] << " "; } for

当我以为结果会是

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
我是否做了一些完全错误的事情,或者为什么这不能像我想的那样工作?
如果相关,我将使用windows的MinGW编译器。

删除后,您不会打印向量的内容,而只打印循环变量

只需将
cout
部分替换为

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

for(int i=0;i打印循环变量,而不是向量的内容。对于所有实例:

改变

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

for(int i=0;i
for(int i=0;iHmm,我在实际代码中没有犯同样的错误。。我应该编辑问题以将问题部分包含在实际代码中,还是再次提问?很抱歉让这变得复杂。。关于你的问题,我只知道哪些听起来合理。接下来,你应该问一个新问题。@Tuotau总是发布你的实际代码。for代码过帐guidelines@MattMcNabb我试图遵循最低限度的指导原则,但实际上又犯了一个错误,因此我没有真正设法重现我最初遇到的问题。但我的缺点是不够小心。@Tuotau没有错误地重试:)(顺便说一句,我猜在“真正的代码”中是这样的在执行擦除操作之前和之后是否使用了相同的迭代器?)
for (int i=0;i<c.size();i++) {
    std::cout << i << " ";
}
for (int i=0;i<c.size();i++) {
    std::cout << c.at(i) << " ";
}
for (int i=0;i<c.size();i++) {
    std::cout << i << " ";
}
for (int i=0;i<c.size();i++) {
    std::cout << c[i] << " ";
}