c++中的向量迭代和移除

Vector Iteration and Removal in C++

本文关键字:迭代 向量 c++      更新时间:2023-10-16

我正在尝试迭代向量并删除对象的第一次出现。我一直得到一个编译错误(使用g++),但我正在删除它的方式stackoverflow回答和其他来源建议删除它。可能我遗漏了一些非常简单的东西,所以另一双眼睛也会很棒。

#include <iostream>
#include <vector>
#include <assert.h>
using namespace std;
bool Garage::remove(const Car &car){
assert(!empty());
int size = v.size();
for(vector<Car>::const_iterator it = v.begin(); it != v.end(); ++it){
    if(it -> Car::make() == car.Car::make()){
        it = v.erase(it);
        assert(v.size() == size - 1);
        return true;
     }
 }
 return false;
}

编译错误是错误:调用std::vector::erase(const Car&)'没有匹配的函数

您正在尝试使用const_iterator擦除。既然要修改vector,就改用常规迭代器。

for(vector<Car>::iterator it = v.begin(); it != v.end(); ++it){

如此:

int main()
{
   vector<int> ints;
   for (vector<int>::iterator iter = ints.begin();iter != ints.end();++iter)
   {
      ints.erase(iter);
   }
}

这并不:

int main()
{
   vector<int> ints;
   for (vector<int>::const_iterator iter = ints.begin();iter != ints.end();++iter)
   {
      ints.erase(iter);
   }
}

使用const_iterator时出错:

test.cpp:18:22: error: no matching function for call to ‘std::vector<int>::erase(std::vector<int>::const_iterator&)’

似乎需要使用find来查找元素的索引,然后将其擦除。我说"appear "是因为我不是c++程序员