1

在 C++ 中使用擦除删除习语时我应该通过引用传递吗?

例如:

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

并通过参考传递城市?

谢谢

4

1 回答 1

5

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

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

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

于 2013-06-06T14:48:58.667 回答