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.
必须有一个共同的方法去做我在这里尝试的东西,我错过了什么?
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