OK, przypuszczam, że popełniłem tu głupi błąd. Mam listę DisplayDevice3d i każdy DisplayDevice3d zawiera listę DisplayMode3d. Chcę usunąć wszystkie elementy z listy DisplayDevice3d, które nie mają żadnych DisplayMode3d. Próbuję użyć Lambda to zrobić, tzn .:std :: remove_if - lambda, nie usuwa niczego z kolekcji
// If the device doesn't have any modes, remove it.
std::remove_if(MyDisplayDevices.begin(), MyDisplayDevices.end(),
[](DisplayDevice3d& device)
{
return device.Modes.size() == 0;
}
);
Nawet z 6 DisplayMode3d w MyDisplayDevices, tylko 1 ma żadnych DisplayMode3d w swojej kolekcji trybach nic nie jest usuwane z listy.
Co tu popełniłem błędny błąd?
Edit:
Ah ok, mój błąd został I powinny być using MyDisplayDevices.remove_if zamiast std :: remove_if jednak poniższe odpowiedzi są prawidłowe dla użycia std :: remove_if: P.
MyDisplayDevices.remove_if([](DisplayDevice3d const & device)
{
return device.Modes.size() == 0;
});
Jeśli sam kontener obsługuje remove_if, użyj go. Uważam, że tak jest w przypadku std :: list.W przypadku kontenerów, które nie oferują remove_if, możesz użyć std :: remove_if w połączeniu z funkcją czyszczenia kontenera. – sellibitze
@sellibitze Innymi słowy, szczurze trucizna – bobobobo
możliwy duplikat [Wymazywanie elementów z wektora] (http://stackoverflow.com/questions/347441/erasing-elements-from-a-vector) – bobobobo