有趣的字符串和矢量

时间:2013-02-19 06:19:42

标签: c++ functor

我是仿函数主题的新手,所以我希望这个问题具有建设性。

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

我的代码:

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

2 个答案:

答案 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());