在c ++中使用erase-remove惯用语时,我应该通过引用传递吗?
例如:
void Country::clean()
{
cities.erase( std::remove_if(
cities.begin(),
cities.end(),
[](City city) -> bool { return city.getNumberOfBuildings() == 0; }
),
cities.end()
);
}
将lambda函数行更改为:
可能更好[](City &city) -> bool { return city.getNumberOfBuildings() == 0; }
并通过参考传递城市?
由于
答案 0 :(得分:5)
制作副本没有任何好处,因此您应该传递参考。但你应该做的是使用const
引用:
[](const City &city) -> bool { return city.getNumberOfBuildings() == 0; }
请注意,在这种情况下,您不必指定返回类型。