首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++ STL for_each的应用

2012-11-07 
C++ STL for_each的使用试定义类Complex和类ComplexAdd,使得下面main函数的执行结果为:(3,5)(5,7)(7,9)(9,

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就行了
[解决办法]

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; 


[解决办法]
std::for_each最后参数是一个函数对象或函数指针。

探讨
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&amp; c)
……

热点排行