创建一个结构数组的数组?

时间:2011-12-06 18:29:43

标签: c++ arrays syntax struct

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

我有一个包含两个整数的结构:

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中,我想要声明一个类型为Arraypoint的数组变量,其中包含8个索引,因此我将有8 * 8 = 64个结构point元素和{ {1}}整数(128 x和64 y)。

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

好的,在Arraypoint中声明之后,让我们说Arraypoint是2。

main

如何初始化元素而无需键入Arraypoint arr[2]; 或不使用for循环。 为什么我不能做以下事情,它似乎不起作用。

arr[0].variable[0].x = ...

我在代码中使用过花括号,返回的错误是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

5 个答案:

答案 0 :(得分:4)

在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;

答案 1 :(得分:1)

struct Arraypoint arraypoints[8];
我想,

是你所追求的。使用它们:

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

虽然不是那么漂亮

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

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

答案 2 :(得分:1)

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

Arraypoint arr[8];

访问元素:

arr[i]

将返回i'Arraypoint元素

arr[i].variable[j]

将返回元素

中的j'点
arr[i].variable[j].x

将返回该点的x坐标。

答案 3 :(得分:1)

得到它:ideone.com/ix3hCArraypoint::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 };
}

答案 4 :(得分:0)

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

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的struct声明中,它接受了8个point类型的元素。所以 我必须创建point to store(x,y)类型的变量,然后我可以将这个变量存储在Array点。

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

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

仅适用于将来遇到同样问题的任何人。