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