2

私は構造体のベクトルに取り組んでいます。

この関数をイテレータで呼び出そうとすると、次のようになります。

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

それは私にこのエラーを送ります:

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

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

4

4 に答える 4

3

イテレータをイテレータに追加することはできません。

iter2すでにベクトル内の具体的な場所を指しているので、次のように書くことができます。

iter2 = vec2.erase(iter2);

代わりは。

于 2012-04-17T14:17:21.200 に答える
2

はいerase、イテレータで動作でき、コードは次のようになります。

erase(itr2);

次のこともできます。

erase(vec2.begin() + 3);

ただし、イテレータは宣言しないoperator+ため、呼び出しは無効です。

于 2012-04-17T14:17:43.683 に答える
0

2つのイテレータを足し合わせようとしていますが、これは意味がありません。

コードを投稿して、何をしようとしているのかを説明してください。

于 2012-04-17T14:18:12.013 に答える
0

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

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

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

于 2012-04-17T14:20:24.730 に答える