字符串的函数和向量

Functors and vector of strings

本文关键字:向量 函数 字符串      更新时间:2023-10-16

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

我有字符串数组()。我需要借助于函子来计算这些字符串的长度之和。

我的代码:

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()传递什么,以获取每个字符串并确定其大小?

不要为此使用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());

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


解决方案:

LengthFinder:的参数不应该有任何内容

 int sum = std::for_each(array.begin(), array.end(), LengthFinder());