我有两个向量。我想通过一些转换将第一个向量元素复制到另一个向量元素,如下所示:
void Append(std::string& a, const std::string& b)
{
a.append(b);
}
std::vector<std::string> v1;
std::vector<std::string> v2;
...
std::transform (v1.begin(), v1.end(), v2.begin(),
boost::bind(Append, std::string("b")));
我该怎么做?
答案 0 :(得分:0)
您正在搜索的内容可能是:
std::transform (v1.begin(), v1.end(), v2.begin(),
std::bind(Append, std::placeholders::_1, std::string("b")));
它将使用v1的每个元素调用Append,追加"b"
并将其放入v2。如果您希望将Append作为对象方法,std::bind(Class::Append, obj, std::placeholders::_1, std::string("b")));
将成为您的朋友,并使用以下代码:
class SomeClass{
public:
Append(std::string, const std::string);
}
其他课程:
obj = new SomeClass();
std::transform (v1.begin(), v1.end(), v2.begin(),
std::bind(Class::Append, obj, std::placeholders::_1, std::string("b")));
这样就可以绑定对象obj的方法,而不是静态类函数。
如果你想使用boost而不是标准的c ++:
boost::bind(Class::Append, obj, _1, std::string("b"))
答案 1 :(得分:0)
我会做这样的事情(脱掉袖口):
for( string& s : v1 )
{
s.append( "b" );
}
v2 = v1;
编写更容易,更容易理解,编译器更容易优化,不需要SO问题。