1

我是 functors 主题的新手,所以我希望这个问题是建设性的。

我有字符串数组()。我需要在函子的帮助下计算这些字符串的长度总和。

我的代码:

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(),以获取每个字符串并获取它的大小?

4

2 回答 2

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());
于 2013-02-19T06:27:06.133 回答
0

正如问题的原始海报所述:


解决方案:

没有什么应该去 LengthFinder 的参数:

 int sum = std::for_each(array.begin(), array.end(), LengthFinder());
于 2013-04-04T23:02:30.443 回答