
一个C++ 类相关的问题,请高手们指教一下,改了半天都达不自己的要求,,,不胜感激!
#include<iostream>#include<vector>usingnamespacestd;classpoint{public:point();point(i...
#include <iostream>
#include <vector>
using namespace std;
class point{
public:
point();
point(int ix,int iy):x(ix),y(iy){}
point& operator=(const point &rhs){this->x=rhs.x;this->y=rhs.y;this->pPoint=rhs.pPoint;return *this;}
int getx(){return x;}
int gety(){return y;}
int sum(){return x+y;}
void setx(int ix){x=ix;}
void sety(int iy){y=iy;}
public:
int x;
int y;
point* pPoint;
};
int main()
{
int i=0;
int j=0;
point OldPoint(0,0);
vector<point> ivec;
for (i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
point point1(i,j);
if (i==0&&j==0)
{
point1.pPoint=NULL;
OldPoint=point1;
ivec.push_back(point1);
continue;
}
point1.pPoint=&OldPoint;
OldPoint=point1;
ivec.push_back(point1);
}
}
vector<point>::iterator it=ivec.begin();
while (it!=ivec.end())
{
cout<<(*it).sum()<<(*it).pPoint->x<<(*it).pPoint->y<<endl;
it++;
}
system("PAUSE");
return 0;
}
我希望通过100次循环在vector ivec中保存100个点,其中后一个点中的pPoint能保存前一个point的信息...但这样的结果是100个点中的point都保存了最后一个点的信息,
我明白是因为每次循环,OldPoint的地址没有改变,一直到最后...
希望前辈们能给出一点建议能让这个程序达到我的要求,多谢啦! 展开
#include <vector>
using namespace std;
class point{
public:
point();
point(int ix,int iy):x(ix),y(iy){}
point& operator=(const point &rhs){this->x=rhs.x;this->y=rhs.y;this->pPoint=rhs.pPoint;return *this;}
int getx(){return x;}
int gety(){return y;}
int sum(){return x+y;}
void setx(int ix){x=ix;}
void sety(int iy){y=iy;}
public:
int x;
int y;
point* pPoint;
};
int main()
{
int i=0;
int j=0;
point OldPoint(0,0);
vector<point> ivec;
for (i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
point point1(i,j);
if (i==0&&j==0)
{
point1.pPoint=NULL;
OldPoint=point1;
ivec.push_back(point1);
continue;
}
point1.pPoint=&OldPoint;
OldPoint=point1;
ivec.push_back(point1);
}
}
vector<point>::iterator it=ivec.begin();
while (it!=ivec.end())
{
cout<<(*it).sum()<<(*it).pPoint->x<<(*it).pPoint->y<<endl;
it++;
}
system("PAUSE");
return 0;
}
我希望通过100次循环在vector ivec中保存100个点,其中后一个点中的pPoint能保存前一个point的信息...但这样的结果是100个点中的point都保存了最后一个点的信息,
我明白是因为每次循环,OldPoint的地址没有改变,一直到最后...
希望前辈们能给出一点建议能让这个程序达到我的要求,多谢啦! 展开
2个回答
展开全部
改好了如下。
#include <iostream>
#include <vector>
using namespace std;
class point{
public:
point();
point(int ix,int iy):x(ix),y(iy){}
point& operator=(const point &rhs){this->x=rhs.x;this->y=rhs.y;this->pPoint=rhs.pPoint;return *this;}
int getx(){return x;}
int gety(){return y;}
int sum(){return x+y;}
void setx(int ix){x=ix;}
void sety(int iy){y=iy;}
public:
int x;
int y;
point* pPoint;
};
int main()
{
int i=0;
int j=0;
point *OldPoint=new point(0,0);
vector<point*> ivec;
for (i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
point *point1=new point(i,j);
if (i==0&&j==0)
{
point1->pPoint=NULL;
OldPoint=point1;
ivec.push_back(point1);
continue;
}
point1->pPoint=OldPoint;
OldPoint=point1;
ivec.push_back(point1);
}
}
vector<point*>::iterator it=ivec.begin();
it++;
//第一个的pPoint是NULL,先跳过去,其实我不太明白为什么下面是输出上一个的数据
while (it!=ivec.end())
{
cout<<"sum="<<(*it)->sum()<<"\n"<<(*it)->pPoint->x<<(*it)->pPoint->y<<endl;
it++;
}
system("PAUSE");
return 0;
}
你说的这个问题和你写的程序有些关系,你本来把东西压进了VECTOR,实际上在逻辑上就已经存在了前后的关系,这个就不需要保存前一个结构的指针了。
你如果依然要保存,那程序就有问题了,你每一个point都是局部变量在栈上,每一次循环之后就释放了(你把数据写入了VECTOR),那你也应该保存VECTOR里该数据所在的地址噻。否则的话,就像我上面这么做,所有数据都在堆里申请空间。
#include <iostream>
#include <vector>
using namespace std;
class point{
public:
point();
point(int ix,int iy):x(ix),y(iy){}
point& operator=(const point &rhs){this->x=rhs.x;this->y=rhs.y;this->pPoint=rhs.pPoint;return *this;}
int getx(){return x;}
int gety(){return y;}
int sum(){return x+y;}
void setx(int ix){x=ix;}
void sety(int iy){y=iy;}
public:
int x;
int y;
point* pPoint;
};
int main()
{
int i=0;
int j=0;
point *OldPoint=new point(0,0);
vector<point*> ivec;
for (i=0;i<10;i++)
{
for(j=0;j<10;j++)
{
point *point1=new point(i,j);
if (i==0&&j==0)
{
point1->pPoint=NULL;
OldPoint=point1;
ivec.push_back(point1);
continue;
}
point1->pPoint=OldPoint;
OldPoint=point1;
ivec.push_back(point1);
}
}
vector<point*>::iterator it=ivec.begin();
it++;
//第一个的pPoint是NULL,先跳过去,其实我不太明白为什么下面是输出上一个的数据
while (it!=ivec.end())
{
cout<<"sum="<<(*it)->sum()<<"\n"<<(*it)->pPoint->x<<(*it)->pPoint->y<<endl;
it++;
}
system("PAUSE");
return 0;
}
你说的这个问题和你写的程序有些关系,你本来把东西压进了VECTOR,实际上在逻辑上就已经存在了前后的关系,这个就不需要保存前一个结构的指针了。
你如果依然要保存,那程序就有问题了,你每一个point都是局部变量在栈上,每一次循环之后就释放了(你把数据写入了VECTOR),那你也应该保存VECTOR里该数据所在的地址噻。否则的话,就像我上面这么做,所有数据都在堆里申请空间。
展开全部
是这样的。。。因为你的pPoint保存的是point1的地址,而你的point1是个临时变量,每次循环之后,point1的生存期也就到了,它会被释放掉。所以你的pPoint保存的地址也就无效了。
至于为什么会每个点都保存了最后一个点的信息,是因为,每次point1分配的内存恰好都在一个地方。so...你懂了吧。。。
怎么改呢?你可以先把point 放到ivec里,这时ivec会得到一个point的拷贝,这份拷贝是会有独立内存的,一直到ivec的生存期结束。然后你再使Oldpoint=ivec[ivec.siz()-1].这样就好了。。。你可以试试
至于为什么会每个点都保存了最后一个点的信息,是因为,每次point1分配的内存恰好都在一个地方。so...你懂了吧。。。
怎么改呢?你可以先把point 放到ivec里,这时ivec会得到一个point的拷贝,这份拷贝是会有独立内存的,一直到ivec的生存期结束。然后你再使Oldpoint=ivec[ivec.siz()-1].这样就好了。。。你可以试试
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询