2012-04-17 4 views
2

私は構造体のベクトルを扱っています。C++:イテレータでvector :: eraseが呼び出されました

私はこのように、イテレータでこの関数を呼び出すしようとしていた場合:

vec2.erase (vec2.begin()+iter2); 

それは私にこのエラーを送信します。

"no match for 'operator+' in '(+vec2)->std::vector<_Tp, _Alloc>::begin [with _Tp = wordstype, _Alloc = std::allocator<wordstype>]() + iter2'" 

は、私はイテレータ(または他のパラメータ)を送ることができますか? はいの場合、問題は何ですか?

+3

イテレータとオフセットが混乱しています:) – dasblinkenlight

+1

iter2とはどのようなタイプですか? – vladmihaisima

答えて

3

iterator to iteratorを追加することはできません。

iter2はすでに、ベクターでの具体的な場所を指すので、あなたが書くことができます。代わりに

iter2 = vec2.erase(iter2); 

。ので、あなたの呼び出しは有効ではありません

erase(vec2.begin() + 3); 

イテレータはoperator+を宣言していないしかし:

+0

イテレータは、このイテレータが指す要素を消去すると無効になるので、 'erase'メソッドは新しいイテレータを返します。有用かもしれません。 –

+0

ありがとうございます!私のポブレムはイテレーター算術の悪い使用でした。あなたは多くを助けました! – adamco

+0

あなたは大歓迎です!感謝の言葉をするのが優先され、答えが受け入れられます。参照:http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work –

2

はいeraseはイテレータで動作することができますし、コードは次のようになります。また、行うことができます

erase(itr2); 

0

2つのイテレータを一緒に追加しようとしていますが、これは意味をなさないものです。

あなたのコードを掲載し、あなたが何をしようとしているのかを説明してください。

0

エラーメッセージによれば、あなたが説明している問題は、std::vector<>::eraseと何も付いていないようです。

コンパイラの問題点はvec2.begin() + iter2です。どうやら、あなたの場合のiter2はイテレータです。 vec2.begin()もイテレータです。あるイテレータを別のイテレータに追加することはできません。それは単に意味をなさない。したがって、エラー。

vec2.begin() + iter2で何をしようとしていますか? iter2が本当にイテレータである場合、なぜそれをvec2.begin()に追加しようとしていますか?

関連する問題