erase
とremove_if
を使用して、オブジェクト(AnObject
s)のベクトルインスタンス(AVector
)から条件付きで要素を消去しています。ベクトルから要素を消去すると、要素に存在するすべての要素ベクトルも消去されますか?
私のシナリオでは、AnObject
は、メンバー変数の1つとしてAnothervector
(Anotherobject
)を持っています。 Anothervector
のサイズを持つすべてのAnObjectを0としたい。 注:BVector
はAnObject
の別のベクトルです。 は述語です。見出さ
// 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
)が消去されていません。
異なるベクトルの終了イテレータを使用しています。 – Galik
@Galik、申し訳ありません。それを私が直した。 – jsp99
** [編集] **あなたの質問は[mcve]または[SSCCE(ショート、自己完結型、正しい例)](http://sscce.org) – NathanOliver