Je supprime conditionnellement les éléments d'une instance vectorielle (AVector
) d'objets (AnObject
s) en utilisant erase
et remove_if
.Est-ce que l'effacement des éléments d'un vecteur efface également tous les vecteurs membres présents dans les éléments?
Dans mon scénario, AnObject
a un Anothervector
(de Anotherobject
s) comme l'une de ses variables membres. Je veux effacer n'importe quel AnObject qui a la taille Anothervector
comme 0. Note: BVector
est un autre vecteur de AnObject
s. condition_1
est un prédicat.
// 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 Bug trouvés - Effacement d'un objet (AnObject
) dans le AVector
n'a pas l'effacement du vecteur d'élément (Anothervector
).
Vous utilisez l'itérateur de fin d'un vecteur différent. – Galik
@Galik, Désolé pour cette faute de frappe. Je l'ai corrigé. – jsp99
S'il vous plaît ** [modifier] ** votre question avec un [mcve] ou [SSCCE (court, autonome, exemple correct)] (http://sscce.org) – NathanOliver