copy_if算法值得吗?

时间:2015-03-13 15:05:27

标签: c++ algorithm stl

我有一些类的以下方法,它还定义了方法isAllowed:

auto filter(const auto& in)
{
    auto ret = decltype(in) {};
    for(auto x : in)
      if(isAllowed(x))
        ret.insert(x);
    return ret;
}

这是一个明显的例子,可以使用copy_if代替。我看到两个替代版本:

auto filter(const auto& in)
{
    auto ret = decltype(in) {};
    copy_if(begin(in), end(in),
            inserter(ret, end(ret)), 
            [this](auto i) {return this->isAllowed(i);});
    return ret;
}

auto filter(const auto& in)
{
    auto ret = decltype(in) {};
    copy_if(begin(in), end(in),
            inserter(ret, end(ret)), 
            bind1st(mem_fn(&A::isAllowed), this)); // I believe this is deprecated
    return ret;
}

两者看起来都不如原版那么明显,所以我倾向于保持for循环。有没有强烈的争论? (还有更好的方法吗?)

否则,我感到痒,因为这样的案例指出算法工具的有用性,尽管有最佳实践建议。

1 个答案:

答案 0 :(得分:2)

我同意这是一个意见问题;但在我的意见中,基于算法的更清晰,因为名称copy_if清楚地说明了您要完成的任务。

你(有条件地)复制了许多东西。