在循环中创建结构的更好方法 我在C++中还没有编码过。最近,我正在努力做一些事情 涉及结构。像这样 typedef struct{ int x; int y; } Point;
然后在一个循环中,我试图创建新的结构,并将指向它们的指针放在一个列表中在循环中创建结构的更好方法 我在C++中还没有编码过。最近,我正在努力做一些事情 涉及结构。像这样 typedef struct{ int x; int y; } Point;,c++,pointers,struct,loops,new-operator,C++,Pointers,Struct,Loops,New Operator,然后在一个循环中,我试图创建新的结构,并将指向它们的指针放在一个列表中 Point* p; int i, j; while (condition){ // compute values for i and j with some function... p = new Point; p* = {i, j}; //initialize my struct. list.append(p); //append this pointer to my list. }
Point* p;
int i, j;
while (condition){
// compute values for i and j with some function...
p = new Point;
p* = {i, j}; //initialize my struct.
list.append(p); //append this pointer to my list.
}
现在,我的问题是,有没有可能简化这个问题?我是说,指针
变量*p位于循环外部,调用p=循环内部的新点。
没有更好的语法吗?当然可以:
Point * p = new Point;
您可能还应该为Point类指定一个构造函数:
struct Point { // note no need for typedef
int x;
int y;
Point( int ax, int ay ) : x( ax ), y( ay ) {}
};
所以你可以说:
Point * p = new Point( i, j );
你可能还想把你的列表中的点值列表,而不是指针,在这种情况下,你可以避免使用新的动态分配-总是在C++中尽可能避免的东西。
Point * p = new Point;
您可能还应该为Point类指定一个构造函数:
struct Point { // note no need for typedef
int x;
int y;
Point( int ax, int ay ) : x( ax ), y( ay ) {}
};
所以你可以说:
Point * p = new Point( i, j );
您可能还希望将列表值设为点值列表,而不是指针,在这种情况下,可以避免使用新的动态分配——在C++中总是可以避免的东西。
< P>结构是默认情况下的公共成员类,您甚至可以在结构中创建构造函数,并在循环中初始化point对象,如下所示:Point* p = new Point(i,j);
由于默认情况下结构是具有公共成员的类,因此您甚至可以在结构中创建构造函数,并在循环中初始化点对象,如下所示:
Point* p = new Point(i,j);
结构可以有如下构造函数:
struct Point{
Point(int ax, int ay):x(ax), y(ay){}
int x;
int y;
};
然后函数可以如下所示:
int i, j;
while (condition)
{
list.append(new Point(i,j));
}
结构可以有如下构造函数:
struct Point{
Point(int ax, int ay):x(ax), y(ay){}
int x;
int y;
};
然后函数可以如下所示:
int i, j;
while (condition)
{
list.append(new Point(i,j));
}
我可以大胆猜测,您不太可能真的需要动态分配点之类的东西 您很可能希望添加构造函数并按值存储它们:
list<Point> list;
list.append(Point(x, y));
列表;
追加(点(x,y));
我大胆猜测,您不太可能真的需要动态分配点之类的东西
您很可能希望添加构造函数并按值存储它们:
list<Point> list;
list.append(Point(x, y));
列表;
追加(点(x,y));
我推荐工厂方法。假设“Point”是许多对象的基类,您可以有一个返回指针的“Factory”
例:
然后在某个地方:
while(cond)
{
list.append(Factory::getPoint(i, j));
}
我推荐工厂方法。假设“Point”是许多对象的基类,您可以有一个返回指针的“Factory” 例: 然后在某个地方:
while(cond)
{
list.append(Factory::getPoint(i, j));
}
哦谢谢你,尼尔!这样每次在循环中都会保留新的p?(抱歉,如果这看起来很愚蠢,我一直都是C)等等!我可以向结构添加方法?!哇!谢谢@桑德拉C在这方面是完全相同的。最好设想每次通过循环都会重新创建pa。结构和类在C++中基本上是一样的。正如Niel所说,你可以这样做:(条件){List.PopyBuffBead(点(i,j));}如果你不需要pointers@sandra结构基本上与类相同,只是默认情况下具有公共访问权限。是的,你可以添加构造函数、方法、析构函数等等,就像classesOh一样!谢谢你,尼尔!这样每次在循环中都会保留新的p?(抱歉,如果这看起来很愚蠢,我一直都是C)等等!我可以向结构添加方法?!哇!谢谢@桑德拉C在这方面是完全相同的。最好设想每次通过循环都会重新创建pa。结构和类在C++中基本上是一样的。正如Niel所说,你可以这样做:(条件){List.PopyBuffBead(点(i,j));}如果你不需要pointers@sandra结构基本上与类相同,只是默认情况下具有公共访问权限。所以,是的,你可以添加构造函数、方法、析构函数等等。就像classesThanks@Simon一样,@Niel的解决方案中的构造函数是必需的吗?当然可以。您必须显式声明构造函数,它不会自动完成。谢谢,Simon!事实上,这就是我在注释构造函数时发现的!:)谢谢@Simon,需要@Niel解决方案中的构造函数吗?当然需要。您必须显式声明构造函数,它不会自动完成。谢谢,Simon!事实上,这就是我在注释构造函数时发现的!:)为什么你会认为Point是一个基类?如果是的话,那就叫做形状,不是吗?这是荒谬的过度设计。为什么你会认为Point是一个基类?如果是的话,那就叫做形状,不是吗?这是荒谬的过度设计。