对容器中所有元素的成员函数结果求和的最佳方法是什么?
假设我有以下对象:
struct Foo
{
int size() { return 2; }
};
获取 vector<Foo>
中所有对象的总 size
的最佳方法是什么(最易于维护、可读等)?我会发布我的解决方案,但我对更好的想法感兴趣.
What's the best way (most maintainable, readable, etc.) to get the total size
of all objects in a vector<Foo>
? I'll post my solution but I'm interested in better ideas.
更新:
到目前为止,我们有:
- std::accumulate 和仿函数
- std::accumulate 和 lambda 表达式
- 普通的 for 循环
还有其他可行的解决方案吗?你可以使用 boost::bind
或 std::bind1st/2nd
使某些东西可维护吗?
Are there any other workable solutions? Can you make something maintainable using boost::bind
or std::bind1st/2nd
?
推荐答案
除了你自己的建议,如果你的编译器支持 C++0x lambda 表达式,你可以使用这个更短的版本:
In addition to your own suggestion, if your compiler supports C++0x lambda expressions, you can use this shorter version:
std::vector<Foo> vf;
// do something to populate vf
int totalSize = std::accumulate(vf.begin(),
vf.end(),
0,
[](int sum, const Foo& elem){ return sum + elem.size();});
相关文章