2016-03-25 7 views
0

はので、私はそうのようなベクトルを保持するベクターを持っている:間違ったラムダの使用量は、

vector<vector<int>> vec; 

をそして私はVEC内のベクトルを反復処理とによって削除されますベクトルを決定するために(predが)コンパレータを使用しようとしていますremove_ifを実行して消去します。これまでの私のコードは次の通りです:

vector<vector<int>> deleted_vecs;  

vec.erase(remove_if(vec.begin(), vec.end(), 
           ([vec, pred](vector<int> x) { 
           if (pred(x)) { 
            return true; 
           } 
           else { 
            deleted_vecs.push_back(x); 
            return false; 
           } 
           }, 
           vec.end()))); 

私はここで構文を賢明にしていますか?

「if(pred(x))」および「deleted_vecs.push_back(x);」という行にマイコンパイルエラーがあります。私の述語は特にベクトルを取り込むことを意図していますが、私はdeleted_vecsをベクトルとして宣言していますが、predとpush_backに一致する関数呼び出しはありません>。 これは、私がxを宣言した方法に問題があると思うようになりますが、わかりません。

助けていただけたら幸いです!

+1

括弧の使用を確認してください。 –

+0

@JoachimPileborgは、私のコードの誤字です。しかし、私がそれを修正すると、問題は依然として続きます。 – user5482356

+0

あなたは 'vec'をキャプチャする必要はありませんが、' deleted_vecs'をキャプチャする必要があります。つまり、あなたは 'deleted_vecs'のコピーにアイテムを追加し、残りのプログラムはそれを見ません。 –

答えて

0

括弧とキャプチャリストにエラーがあります。

使用された変数を値でキャプチャしています。値はオブジェクトのコピーになります。 変数を値ではなく参照で取得してください。 は、例えばhttp://en.cppreference.com/w/cpp/language/lambda

を参照してください。

vec.erase(
    std::remove_if(vec.begin(), vec.end(), 
    [&](std::vector<int> x) { 
     if (pred(x)) { 
     return true; 
     } 
     else { 
     deleted_vecs.push_back(x); 
     return false; 
     } 
    }), 
    vec.end()); 
+0

ありがとうございました。これで作業が終了しました。 – user5482356

関連する問題