1

ファンクターのテーマは初めてなので、この質問が建設的であることを願っています。

文字列の配列()があります。ファンクタを使用して、これらの文字列の長さの合計を計算する必要があります。

私のコード:

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 に答える