好的,我希望我在這裏犯了一個愚蠢的錯誤。我有一個DisplayDevice3d列表,每個DisplayDevice3d包含一個DisplayMode3d列表。我想從DisplayDevice3d列表中刪除沒有任何DisplayMode3d的所有項目。我試圖使用lambda做到這一點,即:std :: remove_if - lambda,不會從集合中刪除任何東西
// If the device doesn't have any modes, remove it.
std::remove_if(MyDisplayDevices.begin(), MyDisplayDevices.end(),
[](DisplayDevice3d& device)
{
return device.Modes.size() == 0;
}
);
即使出6名DisplayMode3d在MyDisplayDevices,只有1個有其模式集合中的任何DisplayMode3d的,沒有什麼是被從列表中刪除。
我在這裏犯了什麼數字錯誤?
編輯:
啊好吧,我錯了,我應該使用MyDisplayDevices.remove_if代替的std ::的remove_if的,但是下面的答案是使用std ::的remove_if正確的:P。
MyDisplayDevices.remove_if([](DisplayDevice3d const & device)
{
return device.Modes.size() == 0;
});
如果容器本身支持remove_if,那麼一定要用它。我相信這是std :: list的情況。對於不提供remove_if的容器,可以將std :: remove_if與容器的擦除成員函數結合使用。 – sellibitze 2010-12-18 18:39:05
@sellibitze換句話說,老鼠毒 – bobobobo 2013-05-04 01:30:03
可能的重複[Erasing elements from a vector](http://stackoverflow.com/questions/347441/erasing-elements-from-a-vector) – bobobobo 2013-05-04 01:36:52