简体   繁体   中英

Create an array of an array of structs?

this question is regarding the syntax of an array of array of structs.

I have a struct that takes in two ints:

struct point
{
    int x, y;
};

I have created another struct that takes in 8 of these structs:

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

Now, in main , I want to declare an array variable of type Arraypoint with 8 indices, so effectively I will have 8 * 8 = 64 elements of struct point and 128 ints ( 64 x and 64 y).

Also, how would I access an individual element struct point from the array Arraypoint ?

Okay after having declared in main lets say Arraypoint is 2.

Arraypoint arr[2];

How do I initialize the elements without having to type in arr[0].variable[0].x = ... or without using for loops. Why can't I do the following, it doesn't seem to work.

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

I have used curly braces in my code, the error returned is missing braces around initializer for type point and too many initializers for type Arraypoint .

In C++, you'd just write:

Arraypoint arr[8];

An individual point could then be accessed via:

arr[i].variable[j];

More practically, though, you'd probably be better off using eg

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

or writing your own class with an overloaded operator(int i, int j) . For example:

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

is what you're after, I think. To use them:

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

This isn't so pretty though

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

Is probably better? Don't know what exactly you're after though.

To create an array of Arraypoints , you can do:

Arraypoint arr[8];

To access an element:

arr[i]

will return the i 'th Arraypoint element

arr[i].variable[j]

will return the j 'th point in the element

arr[i].variable[j].x

will return the x coordinate of that point.

got it: ideone.com/ix3hC . Arraypoint::variable has to have it's own { } pair.

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

So I realized why I couldn't declare my array as such,

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

its because in my struct declaration of Arraypoint, it takes in 8 elements of type point. So I have to create variables of type point to store(x,y) and then i could store this variable in Array point.

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

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

Just for anyone in the future who stumbles across the same problem.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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