dimanche 19 mai 2019

C++11: how to use accumulate / lambda function to calculate the sum of all sizes from a vector of string?

For a vector of strings, return the sum of each string's size.

I tried to use accumulate, together with a lambda function (Is it the best way of calculating what I want in 1-line?)

Codes are written in wandbox (https://wandbox.org/permlink/YAqXGiwxuGVZkDPT)

#include <iostream>
#include <numeric>
#include <string>
#include <vector>
using namespace std;

int main() {
    vector<string> v = {"abc", "def", "ghi"};
    size_t totalSize = accumulate(v.begin(), v.end(), [](string s){return s.size();});
    cout << totalSize << endl;

    return 0;
}

I expect to get a number (9), however, errors are returned:

/opt/wandbox/gcc-head/include/c++/10.0.0/bits/stl_numeric.h:135:39: note: 'std::__cxx11::basic_string' is not derived from 'const __gnu_cxx::__normal_iterator<_Iterator, _Container>' 135 | __init = _GLIBCXX_MOVE_IF_20(__init) + *__first;

I want to know how to fix my codes? Thanks.

Aucun commentaire:

Enregistrer un commentaire