C++ C++;,无法将2个向量复制到对的向量
存在以下数据类型:C++ C++;,无法将2个向量复制到对的向量,c++,vector,copy,std-pair,C++,Vector,Copy,Std Pair,存在以下数据类型: struct Item { double a, b; Item (double a_, double b_): a(a_), b(b_){}}; typedef std::pair <double, Item> TPair; typedef std::vector <TPair> TData; struct Item{double a,b;Item(double a_,double b_):a(a_),b(b_){}; typedef std::对T
struct Item { double a, b; Item (double a_, double b_): a(a_), b(b_){}};
typedef std::pair <double, Item> TPair;
typedef std::vector <TPair> TData;
struct Item{double a,b;Item(double a_,double b_):a(a_),b(b_){};
typedef std::对TPair;
typedef std::vector TData;
我想将2个向量复制到成对向量中:
int main(int argc, char* argv[])
{
std::vector <double> t1;
std::vector <Item> t2;
TData data;
//Error
std::transform (t1.begin(), t1.end(), data.begin(),
std::bind2nd( std::ptr_fun( std::make_pair <double,Item > ), double() ) );
}
intmain(intargc,char*argv[])
{
std::向量t1;
std::载体t2;
TData数据;
//错误
std::transform(t1.begin()、t1.end()、data.begin(),
std::bind2nd(std::ptr_-fun(std::make_-pair),double());
}
但编译器会因以下错误而停止:
Error 1 error C2784: 'std::pointer_to_binary_function<_Arg1,_Arg2,_Result,_Result(__fastcall *)(_Arg1,_Arg2)>
std::ptr_fun(_Result (__fastcall *)(_Arg1,_Arg2))' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
Error 2 error C2784: 'std::pointer_to_binary_function<_Arg1,_Arg2,_Result,_Result(__fastcall *)(_Arg1,_Arg2)>
std::ptr_fun(_Result (__fastcall *)(_Arg1,_Arg2))' : could not deduce template argument for 'overloaded function type' from 'overloaded function type'
错误1错误C2784:'std::指向二进制函数的指针
std::ptr_fun(_Result(u fastcall*)(_Arg1,_Arg2)):无法从“重载函数类型”推断“重载函数类型”的模板参数
错误2错误C2784:“std::指针指向二进制函数”
std::ptr_fun(_Result(u fastcall*)(_Arg1,_Arg2)):无法从“重载函数类型”推断“重载函数类型”的模板参数
问题在哪里?谢谢你的帮助。编译器MSVS2010 x86。我更喜欢一个没有助推的解决方案
更新的问题
dasblinkenlight发现错误,更正代码为:
std::transform (t1.begin(), t1.end(), data.begin(), std::bind1st( std::ptr_fun( std::make_pair <double,Item > ), double() ) );
std::transform(t1.begin()、t1.end()、data.begin()、std::bind1st(std::ptr_-fun(std::make_-pair)、double());
但是编译器显示了相同的错误…std::make_pair的第二个参数是
项,而不是双参数。我想您应该改用std::bind1st
。std::make\u pair
的第二个参数是项,而不是双参数。我想你应该改用std::bind1st
。make\u pair
的第二个参数是Item
,而不是double
:
std::transform (t1.begin(), t1.end(), data.begin(),
std::bind2nd( std::ptr_fun( std::make_pair <double,Item > ), Item(0,0) ) );
然后调用如下所示:
std::transform (t1.begin(), t1.end(), data.begin(),
std::bind2nd( std::ptr_fun<double,Item,std::pair<double,Item> >( make_pair), Item(0,0) ) );
std::transform(t1.begin(),t1.end(),data.begin(),
std::bind2nd(std::ptr_-fun(配对),项目(0,0));
组合对的第二个参数是项,而不是双参数
:
std::transform (t1.begin(), t1.end(), data.begin(),
std::bind2nd( std::ptr_fun( std::make_pair <double,Item > ), Item(0,0) ) );
然后调用如下所示:
std::transform (t1.begin(), t1.end(), data.begin(),
std::bind2nd( std::ptr_fun<double,Item,std::pair<double,Item> >( make_pair), Item(0,0) ) );
std::transform(t1.begin(),t1.end(),data.begin(),
std::bind2nd(std::ptr_-fun(配对),项目(0,0));
您不应该使用不推荐使用的活页夹,因为它们只会
在你撞上一些基本上
无法求解(具有多个参数的成员函数,多个
超过2个参数,未知返回类型),并且它们与不兼容
C++11lambdas。用于某种程度的前向兼容性
boost::bind
。您的代码有效地变成:
boost::bind(make_pair<double, Item>, double(), _1);
奇怪的是,它不是在4.6.2上用C++11编译的。我没有
我还没弄明白原因。但把它作为一个很好的例子,为什么你不应该
使用不推荐使用的活页夹 您不应该使用不推荐使用的活页夹,因为它们只会
在你撞上一些基本上
无法求解(具有多个参数的成员函数,多个
超过2个参数,未知返回类型),并且它们与不兼容
C++11lambdas。用于某种程度的前向兼容性
boost::bind
。您的代码有效地变成:
boost::bind(make_pair<double, Item>, double(), _1);
奇怪的是,它不是在4.6.2上用C++11编译的。我没有
我还没弄明白原因。但把它作为一个很好的例子,为什么你不应该
使用不推荐使用的活页夹 您使用的是哪种编译器?在最新的编译器(即lambda表达式)上有更简单的方法来实现这一点。您使用的是哪种编译器?在最新的编译器(即lambda表达式)上有更简单的方法来实现这一点。@R.MartinhoFernandes好,为了使用bind1st
,他需要将t1
替换为t2
。我不太清楚OP为什么要使用transform,因为很难使用它将两个向量“压缩”在一起。我想要一个for
循环:)@dasblinkenlight还有一个二进制版本的std::transform
,它非常适合压缩。我不明白为什么C++11没有添加n元形式。对我来说,这听起来像是一个提议。@justik这很奇怪,因为我从一个我刚刚用g++编译的程序中提取了这个片段。这里它是开着的。@dasblinkenlight:VS2010下的这段代码不起作用,仍然是相同的错误:-(.语法highliting与std::ptr_-fun有问题…在另一段代码中,包含std::ptr_-fun的构造工作得很好…@justik我明白你的意思了(只是将代码复制到VS中,它不编译)。问题似乎是make_pair
引用了第二个参数,MS编译器似乎对此有问题。请参阅我的更新。@R.MartinhoFernandes,为了使用bind1st
,他需要将t1
替换为t2
。我不太清楚OP为什么要使用transform,是吗因为很难用它将两个向量“压缩”在一起。我会选择一个for
循环:)@dasblinkenlight还有一个二进制版本的std::transform
,非常适合压缩。我不明白为什么C++11没有添加n元形式。对我来说,这听起来像是一个提议。@justik这很奇怪,因为我从一个我刚刚用g++编译的程序中提取了这个片段。这里它是开着的。@dasblinkenlight:VS2010下的这段代码不起作用,仍然是相同的错误:-(.语法highliting与std::ptr_-fun有问题…在另一段代码中,包含std::ptr_-fun的构造工作得很好…@justik我明白你的意思了(只是将代码复制到VS中,它不编译)。问题似乎是,make_pair
引用了它的第二个参数,而MS编译器似乎对此有问题。请参阅我的更新。有没有没有没有Boost的解决方案?@justik每个现代编译器都有一个TR1
实现,它有一个std::bind
。有没有Boost的解决方案吗?@justik每一个现代编译器都有