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

Should I pass by reference when using the erase-remove idiom in c++?

本文关键字:我应该 引用 c++ 擦除 习语 删除      更新时间:2023-10-16

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

和pass city by reference?

谢谢

创建副本没有任何好处,因此您可能应该传递引用。但是你应该做的是使用const引用:

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

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