2016-10-21 5 views
-1

words_in_familyのベクトルvector<vector<string>>があります。文字列ベクトルlargest_familyと等しくないwords_in_familyのすべての要素を削除しようとしていますが、問題があり、その理由が不明です。どんな助けもありがとうございます。ベクトルのループ内の要素を削除する

for (int i = words_in_family.size() - 1; i >= 0; i--) 
{ 
    if (words_in_family[i] != largest_family) 
    { 
     words_in_family.erase(words_in_family[i]); 
    } 
} 
+1

あなたはどんな問題がありますか? –

+1

'ベクトル<文字列、ベクトル>' ...ベクトル宣言が間違っています。コンパイルエラーが発生するはずです。あなたはベクトルの宣言方法を指定できますか? –

+0

@SauravSahuオーバーロードされた関数について何か言及しているコードが実行されますが、ベクトル要素の削除は行われません。 – KnightValor

答えて

1

eraseメソッドは価値がありません。代わりeraseメソッドのパラメータとしてイテレータを使用:

vector<vector<string>>::iterator it = words_in_family.begin(); 
for (int i = words_in_family.size() - 1; i >= 0; i--) 
{ 
    if (words_in_family[i] != largest_family) 
    { 
     words_in_family.erase(it+i); 
    } 
} 

イテレータ消去(イテレータ位置)。 イテレータの消去(イテレータを最初に、イテレータを最後に)。

std :: vectorのイテレーターはランダムアクセスイテレーターであるため、他の有効なイテレーターを得るために整数値を加算/減算することができます。

0
words_in_family.erase(words_in_family.begin()+i, words_in_family.begin()+i+1); 

消去は、あなたの場合には、引数

1

C++ std::vector消去素子としてイテレータを取る:

は、その値が等しいlargest_familyにベクトル(words_in_family)から要素を消去します

std::vector<std::vector<std::string>>::iterator Itr; 
for(Itr = Words_in_family.begin(); Itr != Words_in_family.end();) 
{ 
    if(*Itr == largest_family) 
    { 
     Itr = Words_in_family.erase(Itr); 
    } 
    else 
    { 
     Itr++; 
    } 
} 
関連する問題