我是仿函数主题的新手,所以我希望这个问题具有建设性。
我有一些字符串数组()。我需要在仿函数的帮助下计算这些字符串的长度总和。
我的代码:
class LengthFinder{
private:
size_t sum;
public:
LengthFinder():sum(0){}
void operator()(string elem)
{
sum += elem.size();
}
operator int()
{
return sum;
}
};
int main(int argc, char* argv[])
{
vector< string > array;
array.push_back("string");
array.push_back("string1");
array.push_back("string11");
string elem;
int sum = std::for_each(array.begin(), array.end(), LengthFinder(/*??*/));
return 0;
}
我应该传递给LengthFinder(),获取每个字符串并取大小?
答案 0 :(得分:5)
请勿使用for_each
。它可以被迫完成这项工作,但这是相当多的额外工作,因为它不是真正适合这项工作的工具。
你想要使用的是std::accumulate
,它是为你正在做的事情而构建的。
struct length : std::binary_function<size_t, size_t, std::string> {
size_t operator()(size_t a, std::string const &b) {
return a+b.length();
}
};
// ...
int sum = std::accumulate(array.begin(), array.end(), 0, length());
答案 1 :(得分:0)
正如问题的原始海报所述:
解决方案:
没有什么可以去参考LengthFinder的参数:
int sum = std::for_each(array.begin(), array.end(), LengthFinder());