Ok, supongo que cometí un error tonto aquí. Tengo una lista de DisplayDevice3d y cada DisplayDevice3d contiene una lista de DisplayMode3d. Quiero eliminar todos los elementos de la lista de DisplayDevice3d que no tienen ningún DisplayMode3d. Estoy intentando utilizar un Lambda de hacerlo, es decir .:std :: remove_if - lambda, sin eliminar nada de la colección
// If the device doesn't have any modes, remove it.
std::remove_if(MyDisplayDevices.begin(), MyDisplayDevices.end(),
[](DisplayDevice3d& device)
{
return device.Modes.size() == 0;
}
);
A pesar de que de cada 6 de DisplayMode3d en MyDisplayDevices, solamente 1 tiene alguna de DisplayMode3d en su colección modos, nada se va a quitar de la lista.
¿Qué error numpty he hecho aquí?
Editar:
Ah bien, mi error fue que debería usar MyDisplayDevices.remove_if en lugar de std :: remove_if, sin embargo, las respuestas a continuación son correctos para el uso de std :: remove_if: p.
MyDisplayDevices.remove_if([](DisplayDevice3d const & device)
{
return device.Modes.size() == 0;
});
Si el propio recipiente soporta remove_if entonces por todos los medios la utilizan. Creo que este es el caso con std :: list.Para contenedores que no ofrecen remove_if, puede usar std :: remove_if en combinación con la función de miembro de borrado del contenedor. – sellibitze
@sellibitze En otras palabras, veneno para ratas – bobobobo
posible duplicado de [Borrando elementos de un vector] (http://stackoverflow.com/questions/347441/erasing-elements-from-a-vector) – bobobobo