Tag: erase remove idiom

std :: remove_if – lambda,不会从集合中删除任何东西

好的,我希望我在这里犯了一个愚蠢的错误。 我有一个DisplayDevice3d列表,每个DisplayDevice3d包含一个DisplayMode3d列表。 我想从DisplayDevice3d列表中删除没有任何DisplayMode3d的所有项目。 我正在尝试使用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; } ); 即使在MyDisplayDevices中的6个DisplayMode3d中,只有1个在其Modes集合中具有任何DisplayMode3d,但是没有任何内容从列表中移除。 我在这里犯了什么错误? 编辑: 嗯,我的错误是我应该使用MyDisplayDevices.remove_if而不是std :: remove_if,但是下面的答案是正确的使用std :: remove_if:p。 MyDisplayDevices.remove_if( [](DisplayDevice3d const & device) { return device.Modes.size() == 0; });