Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/134.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;11如何使用lambda和高阶函数将向量转换为不同类型的向量_C++_C++11_Vector_Lambda_Stl - Fatal编程技术网

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

C++ C++;11如何使用lambda和高阶函数将向量转换为不同类型的向量,c++,c++11,vector,lambda,stl,C++,C++11,Vector,Lambda,Stl,在C++11中,有没有一种方法可以使用高阶函数返回不同类型的向量?我有一个std::vector,想把它转换成std::vector,它是我自己设备的枚举 假设我有一个方法footoo(std::string)。我试过: std::vector<Foo> m_Foos = std::for_each(m_Foo_strings.begin(), m_Foo_strings.end(), [this](std::string &s){ toFo

在C++11中,有没有一种方法可以使用高阶函数返回不同类型的向量?我有一个
std::vector
,想把它转换成
std::vector
,它是我自己设备的枚举

假设我有一个方法
footoo(std::string)
。我试过:

std::vector<Foo> m_Foos = std::for_each(m_Foo_strings.begin(),
        m_Foo_strings.end(), 
        [this](std::string &s){ toFoo(s); } );
std::vector m_Foos=std::for each(m_Foo_strings.begin(),
m_Foo_strings.end(),
[this](std::string&s){toFoo(s);});
并尝试:

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); } );
std::vector m\u Foos=std::transform(m\u Foo\u strings.begin(),
m_Foo_strings.end(),
m_Foo_strings.begin(),
[this](std::string&s){toFoo(s);});
但两者都没有编译。它抱怨从std::string到Foo没有定义运算符

必须有一种通用的方法来执行我在这里尝试的操作,我缺少什么?

不返回
向量,它应用指定的转换并将结果存储在传递的目标范围内

std::transform(m_Foo_strings.begin(),
               m_Foo_strings.end(),
               std::back_inserter(m_Foos),
               [this](std::string &s){ return toFoo(s); } );
构造一个
back\u insert\u迭代器
,当
transform
将调用结果分配给lambda时,该迭代器将调用
vector::push\u back
m\u Foos
添加元素;
std::vector<Foo> m_Foos;
std::for_each(m_Foo_strings.begin(),
              m_Foo_strings.end(), 
              [this, &m_Foos](std::string &s){ m_Foos.push_back(toFoo(s)); } );
std::for_each(m_Foo_strings.begin(), m_Foo_strings.end(), [this,&mufoos](std::string&s){mufoos.push_-back(toFoo(s));};
我会使用基于范围的for循环。如果要从
开始
迭代到
结束
,则此操作有效,但如果只想处理子集,则需要对每个使用
,或者使用
转换

std::vector<Foo> m_Foos;
for (const auto& s : m_Foo_strings) {
    m_Foos.push_back(toFoo(s));
}
std::vector m_Foos;
用于(常量自动和s:m_Foo_字符串){
m_Foos.向后推(豆腐);
}

任何文档都会很快告诉您这些函数有哪些参数和返回类型这看起来很有希望,是否可以保证每个_的遍历顺序与初始向量相同?那么m_Foo_字符串和m_Foo将处于相同的顺序?是的。看。将给定函数对象f按顺序应用于范围[first,last]中每个迭代器的解引用结果