2017-05-15 22 views
-2

eraseremove_ifを使用して、オブジェクト(AnObjects)のベクトルインスタンス(AVector)から条件付きで要素を消去しています。ベクトルから要素を消去すると、要素に存在するすべての要素ベクトルも消去されますか?

私のシナリオでは、AnObjectは、メンバー変数の1つとしてAnothervectorAnotherobject)を持っています。 Anothervectorのサイズを持つすべてのAnObjectを0としたい。 注:BVectorAnObjectの別のベクトルです。 は述語です。見出さ

// Copy elements from BVector to AVector based on a condition 
    for (int i = 0; i < BVector.size(); i++) 
      { 
       AnObject temp; 
       AVector.push_back(temp); 
       std::copy_if(BVector.at(i).getVector().begin(), BVector.at(i).getVector().end(), back_inserter(AVector.at(i).getVector()), condition_1); 
      } 
// Trim the AVector by removing AnObjects with Anothervector of size 0 
auto const cond_trim = [](AnObject& anobj) 
{ 
    // std::cout << "Size is " << anobj.getVector().size(); 
    return anobj.getVector().size() == 0; 
}; 

std::vector<Anotherobject>& AnObject::getVector() 
{ 
    return Anothervector; 
} 

auto iter = std::remove_if(AVector.begin(), AVector.end(), cond_trim); 
AVector.erase(iter, AVector.end()); 

UPDATE バグ - AVectorにオブジェクト(AnObject)を消去部材ベクター(Anothervector)が消去されていません。

+6

異なるベクトルの終了イテレータを使用しています。 – Galik

+0

@Galik、申し訳ありません。それを私が直した。 – jsp99

+5

** [編集] **あなたの質問は[mcve]または[SSCCE(ショート、自己完結型、正しい例)](http://sscce.org) – NathanOliver

答えて

1

cond_trimは、コレクション自体ではなく、AnObjectのオブジェクトではなく、Avectorのオブジェクトを受け入れる必要があります。

+1

これはあなたの例の誤字かもしれません。なぜなら(AVectorがAnObjectから継承しない限り)コンパイルすべきではないからです。 –

関連する問題