C++ C++;11如何使用lambda和高阶函数将向量转换为不同类型的向量
在C++11中,有没有一种方法可以使用高阶函数返回不同类型的向量?我有一个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
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]中每个迭代器的解引用结果