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 に答える