C++ 11如何使用lambda和更高阶函数将向量转换为不同类型的向量

Luc*_*cas 3 c++ lambda stl vector c++11

有没有办法在C++ 11中使用高阶函数返回不同类型的向量?我有一个,std::vector<std::string>并希望将其转换std::vector<Foo>为我自己设备的枚举.

假设我有一个方法Foo toFoo(std::string).我试过了:

std::vector<Foo> m_Foos = std::for_each(m_Foo_strings.begin(),
        m_Foo_strings.end(), 
        [this](std::string &s){ toFoo(s); } );
Run Code Online (Sandbox Code Playgroud)

并尝试过:

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); } );
Run Code Online (Sandbox Code Playgroud)

但是没有编译.它抱怨没有operator =从std :: string定义到Foo.

必须有一个共同的方法去做我在这里尝试的东西,我错过了什么?

Pra*_*ian 8

std::transform不返回a vector,它应用指定的转换并将结果存储在您传递的目标范围内

std::transform(m_Foo_strings.begin(),
               m_Foo_strings.end(),
               std::back_inserter(m_Foos),
               [this](std::string &s){ return toFoo(s); } );
Run Code Online (Sandbox Code Playgroud)

back_inserter构造一个在调用lambda 时back_insert_iterator调用vector::push_back添加元素的构造.m_Foostransform