我一直在寻找一种方法来使用std :: replace_if更新向量中的当前结构,而不是创建新对象。
例如
std::vector<setting> settings;
// ... add stuff to settings
setting newsetting;
std::string name = "something";
std::replace_if(settings.begin(), settings.end(), [&](setting const& v)
{
return v.name == name;
}, newsetting);
在这种情况下,我需要使用newsetting,有什么方法可以引用我现有的向量并更新那里的值?我已经查找了这个问题,但只是在boost中找到了解决方案,我想在STL中严格执行此操作。
感谢。
答案 0 :(得分:2)
我不认为你需要比花园种类范围迭代更有趣的东西:
std::vector<setting> settings;
for (auto &one_setting:settings)
{
if (one_setting.name == name)
{
one_setting.a_method_that_changes_this_setting_somehow();
}
}