在c ++中使用erase-remove惯用语时,我应该通过引用传递吗?

时间:2013-06-06 14:46:48

标签: c++ c++11 lambda

在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; }

并通过参考传递城市?

由于

1 个答案:

答案 0 :(得分:5)

制作副本没有任何好处,因此您应该传递参考。但你应该做的是使用const引用:

[](const City &city) -> bool { return city.getNumberOfBuildings() == 0; }

请注意,在这种情况下,您不必指定返回类型。