C ++中的向量迭代和删除

时间:2012-12-30 04:00:35

标签: c++ vector iteration

我正在尝试迭代一个向量并删除第一次出现的对象。我一直得到一个编译错误(使用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&amp;)'

2 个答案:

答案 0 :(得分: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&)’

答案 1 :(得分:1)

It appears您需要使用find来查找元素的索引,然后erase。我说“看起来”因为我不是C ++程序员。