C++ STL for_each的应用
C++ STL for_each的使用
试定义类Complex和类ComplexAdd,使得下面main函数的执行结果为:
(3,5)
(5,7)
(7,9)
(9,11)
(11,13)
(6,8)
(8,10)
(10,12)
(12,14)
(14,16)
int main(void)
{
Complex A[] = { Complex(1, 2), Complex(3, 4), Complex(5, 6), Complex(7, 8), Complex(9, 10)};
vector<Complex> aa(A, A + 5);
for_each(aa.begin(), aa.end(), ComplexAdd(2,3));
for_each(A, A+10, ComplexAdd(5,6));
vector<Complex>::iterator p;
for ( p = aa.begin(); p != aa.end(); p++)
cout << *p;
cout << endl;
int i;
for (i = 0; i < 5; i++)
cout << A[i];
return 0;
}
下面是我写的:
class Complex{
int rec;
int vir;
public:
Complex(int r=0,int v=0){
rec=r;vir=v;
}
friend ostream&operator<<(ostream &os,const Complex&com);
friend class ComplexAdd;
};
ostream&operator<<(ostream&os,const Complex&com){
os<<"("<<com.rec<<","<<com.vir<<")"<<endl;
return os;
}
class ComplexAdd{
Complex com;
public:
ComplexAdd(int a,int b){
com.rec+=a;com.vir+=b;
}
};
编译的时候出现问题:
项不会计算为接受1个参数的函数
错误指向for_each函数的源代码
------解决方案--------------------
for_each(aa.begin(), aa.end(), ComplexAdd(2,3));
Complex对象没复制给ComplexAdd里面的com啊。。。
------解决方案--------------------
函数对象不是这么用的
应该重载()运算符,然后直接在for_each里调默认构造的ComplexAdd就行了
------解决方案--------------------
试定义类Complex和类ComplexAdd,使得下面main函数的执行结果为:
(3,5)
(5,7)
(7,9)
(9,11)
(11,13)
(6,8)
(8,10)
(10,12)
(12,14)
(14,16)
int main(void)
{
Complex A[] = { Complex(1, 2), Complex(3, 4), Complex(5, 6), Complex(7, 8), Complex(9, 10)};
vector<Complex> aa(A, A + 5);
for_each(aa.begin(), aa.end(), ComplexAdd(2,3));
for_each(A, A+10, ComplexAdd(5,6));
vector<Complex>::iterator p;
for ( p = aa.begin(); p != aa.end(); p++)
cout << *p;
cout << endl;
int i;
for (i = 0; i < 5; i++)
cout << A[i];
return 0;
}
下面是我写的:
class Complex{
int rec;
int vir;
public:
Complex(int r=0,int v=0){
rec=r;vir=v;
}
friend ostream&operator<<(ostream &os,const Complex&com);
friend class ComplexAdd;
};
ostream&operator<<(ostream&os,const Complex&com){
os<<"("<<com.rec<<","<<com.vir<<")"<<endl;
return os;
}
class ComplexAdd{
Complex com;
public:
ComplexAdd(int a,int b){
com.rec+=a;com.vir+=b;
}
};
编译的时候出现问题:
项不会计算为接受1个参数的函数
错误指向for_each函数的源代码
------解决方案--------------------
for_each(aa.begin(), aa.end(), ComplexAdd(2,3));
Complex对象没复制给ComplexAdd里面的com啊。。。
------解决方案--------------------
函数对象不是这么用的
应该重载()运算符,然后直接在for_each里调默认构造的ComplexAdd就行了
------解决方案--------------------
- C/C++ code
#include <iostream> #include <algorithm> #include <vector> class Complex { public: Complex(int x,int y) :_x(x),_y(y){ } ~Complex() { } void setX(int x) { _x = x; } void setY(int y) { _y = y; } int getX()const { return _x; } int getY()const { return _y; } private: int _x,_y; }; std::ostream & operator<<(std::ostream & os,const Complex &c) { os<<"("<<c.getX()<<","<<c.getY()<<")"<<std::endl; return os; } class ComplexAdd { public: ComplexAdd(int x,int y) :_x(x),_y(y) { } ~ComplexAdd() { } void operator()(Complex &c) { c.setX(c.getX()+_x); c.setY(c.getY()+_y); } private: int _x,_y; }; int main(int argc,char *argv[]) { Complex A[]= { Complex(1,2),Complex(3,4),Complex(5,6),Complex(7,8),Complex(9,10) }; std::vector<Complex> aa(A,A+5); std::for_each(aa.begin(),aa.end(),ComplexAdd(2,3)); std::for_each(A,A+5,ComplexAdd(5,6)); std::vector<Complex>::iterator p; for(p = aa.begin();p!=aa.end();p++) { std::cout<<*p; } std::cout<<std::endl; int i; for(i = 0; i < 5;i++) { std::cout<<A[i]; } return 0; }
------解决方案--------------------
- C/C++ code
class ComplexAdd{ Complex com; public: ComplexAdd(int a,int b){ com.rec+=a;com.vir+=b; } operator Complex() const { return com; } void operator()(Complex const& c) { com.rec += c.rec; com.vir += c.vir; } }; ComplexAdd sum = std::for_each(v.begin(), v.end(), ComplexAdd(2,3)); Complex c = sum; std::cout << "sum: " << c << std::endl;