c++ - 从容器中元素的成员函数中累积结果

标签 c++ stl std stl-algorithm

我有一个类,有一个返回计数的函数,如下所示:

class CTestClass
{
public:
    // ...
    size_t GetCount()const;
    // ...
};

在我程序的某处,我有一个该类对象的 vector 。我有一个函数来获取总计数(CTestClass::GetCount() 的结果总和),像普通循环一样实现:

size_t sum = 0;
for(vector<CTestClass>::const_iterator it = v.begin(); it != v.end(); ++it)
{
    sum += it->GetCount();
}

我想重构它以使用标准库中可用的设施,于是我想到了accumulate。我已经能够通过使用函数对象(简单)来做到这一点,但我几乎可以肯定它可以在不声明另一个对象的情况下完成(我没有 C++11 或 boost,所以没有 lambda,但我有 TR1)。
在寻找答案时,我找到了这些资源,但它们并没有解决问题:

  • This几乎是同一个问题,并提供了答案 是一个循环、accumulate 和 functor,以及 accumulate 和 lambda,但是有一个未回答的绑定(bind)等引用。
  • This answer to a similar question使用 accumulateplusbind,但使用数据成员而不是成员函数。

那么,有没有办法使用 bind 或类似的方法来做到这一点?

最佳答案

我认为以下应该可行:

using namespace std;
using namespace std::tr1;
using namespace std::tr1::placeholders;

accumulate(v.begin(), v.end(), 0,
           bind(plus<size_t>(), _1, bind(&C::GetCount, _2))
);

关于c++ - 从容器中元素的成员函数中累积结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8415159/

相关文章:

c++ - 缩小 unsigned int 到 short unsigned int 的转换

c++ - 在哪里可以获得作为 STD 的一部分包含在 VS2010 中的 boost 库列表?

c++ - 在使用 std::find() 的不成功搜索中返回特定值而不是 0

c++ - native IIS7.5 模块未运行

c++ - 列出目录 C++ 中的文件

c++ - 类模板实例化为类型模板参数,语法?

C++ 模板化容器扫描器

c++ - STL set_symmetric_difference 的时间复杂度

c++ - 有效地将 std::unordered_set 的内容移动到 std::vector

c++ - 非静态成员函数的 std::add_pointer 实现