c++ - C++11 How to use lambda and higher order functions to transform a vector to a vector of different type -


is there way return vector of different type using higher order functions in c++11? have std::vector<std::string> , want convert std::vector<foo> enum of own device.

assume have method foo tofoo(std::string). i've tried:

std::vector<foo> m_foos = std::for_each(m_foo_strings.begin(),         m_foo_strings.end(),          [this](std::string &s){ tofoo(s); } ); 

and tried:

std::vector<foo> m_foos = std::transform(m_foo_strings.begin(),         m_foo_strings.end(),         m_foo_strings.begin(),          [this](std::string &s){ tofoo(s); } ); 

but neither compiles. complains no operator= defined std::string foo.

there has common way i'm trying here, missing?

std::transform not return vector, applies specified transformation , stores results in destination range pass it

std::transform(m_foo_strings.begin(),                m_foo_strings.end(),                std::back_inserter(m_foos),                [this](std::string &s){ return tofoo(s); } ); 

back_inserter constructs back_insert_iterator call vector::push_back add elements m_foos when transform assigns result of call lambda.


Popular posts from this blog