繁体   English   中英

创建结构数组的数组?

[英]Create an array of an array of structs?

这个问题是关于结构体数组的语法。

我有一个接受两个整数的结构:

struct point
{
    int x, y;
};

我创建了另一个结构,其中包含以下8种结构:

//Creating an Array of Array of structs
struct Arraypoint
{
    point variable[8];
};
//Not sure if this is the correct way to do it.

现在,在main ,我想声明一个具有8个索引的Arraypoint类型的数组变量,因此有效地,我将拥有8 * 8 = 64结构point元素和128整数( 64 x和64 y)。

另外,如何从数组Arraypoint访问单个元素结构点?

main声明之后可以说Arraypoint是2。

Arraypoint arr[2];

如何初始化元素而不必键入arr[0].variable[0].x = ...或不使用for循环。 为什么我不能执行以下操作,但它似乎不起作用。

Arraypoint arr[2] = {  {(x,y),(x,y),(x,y),(x,y),(x,y),(x,y),(x,y),(x,y)},
                       {(x,y),(x,y),(x,y),(x,y),(x,y),(x,y),(x,y),(x,y)}  }//xy are rand

我在代码中使用了花括号,返回的错误是missing braces around initializer for type point ,而missing braces around initializer for type point too many initializers for type Arraypoint

在C ++中,您只需编写:

Arraypoint arr[8];

然后可以通过以下方式访问单个点:

arr[i].variable[j];

不过,实际上,最好使用例如

std::vector<std::vector<point> >

或使用重载的operator(int i, int j)编写自己的类。 例如:

class PointMatrix
{
private:
    std::vector<point> m_points;
public:
    PointMatrix() : m_points(64) {}
    point& operator()(int i, int j) { return m_points[8 * i + j]; }
    const point& operator()(int i, int j) const { return m_points[8 * i + j]; }
};

PointMatrix mat;
m(3, 4).x = 23;
struct Arraypoint arraypoints[8];

我想,这就是你所追求的。 要使用它们:

int firstx = arraypoints[0].variable[0].x;

虽然不是很漂亮

struct point { int x, y; };
struct point[8][8] arraypoints;

可能更好吗? 不知道你到底在追求什么。

要创建Arraypoints数组,您可以执行以下操作:

Arraypoint arr[8];

要访问元素:

arr[i]

将返回第i个Arraypoint元素

arr[i].variable[j]

将返回元素中的第j个点

arr[i].variable[j].x

将返回该点的x坐标。

知道了: ideone.com/ix3hC Arraypoint::variable必须具有自己的{ }对。

struct point
{
    int x, y;
};
#define P {0, 0}

struct Arraypoint
{
    point variable[8];
};
#define V { P, P, P, P, P, P, P, P} 
#define AP { V }  //this is the pair you missed

int main() {
    Arraypoint arr[2] = { AP, AP };
}

所以我意识到了为什么不能这样声明我的数组,

Arraypoint arr[2] = {  {(x,y),(x,y),(x,y),(x,y),(x,y),(x,y),(x,y),(x,y)},
                   {(x,y),(x,y),(x,y),(x,y),(x,y),(x,y),(x,y),(x,y)}  }
                    //xy are randomn integer values

这是因为在我的Arraypoint的结构声明中,它接受了8个类型为point的元素。 所以我必须创建指向store(x,y)的point类型的变量,然后才能将此变量存储在Array point中。

  point point1 = {x,y}, ...;   

  Arraypoint arr[2] = {  {point1,point2,point3,point4,point5,....}  };

只供将来遇到相同问题的人使用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM