3

我正在尝试遍历向量并删除第一次出现的对象。我不断收到编译错误(使用 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;
}

编译错误是 error: no matching function for call to 'std::vector::erase(const Car&)'

4

2 回答 2

3

您正在尝试使用 const_iterator 进行擦除。由于您正在尝试修改向量,请切换到常规迭代器。

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&)’
于 2012-12-30T04:03:15.950 回答
1

看来您需要使用find来查找元素的索引并随后将其删除。我说“出现”是因为我不是 C++ 程序员。

于 2012-12-30T04:09:36.457 回答