Создать массив из массива структур? - PullRequest
0 голосов
/ 06 декабря 2011

этот вопрос касается синтаксиса массива массивов структур.

У меня есть структура, которая принимает два целых числа:

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 и 128 целых (64 x). и 64 у).

Кроме того, как мне получить доступ к отдельной точке структуры элемента из массива 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 и too many initializers for type Arraypoint.

Ответы [ 5 ]

4 голосов
/ 06 декабря 2011

В 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 голос
/ 10 декабря 2011

получил: 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 };
}
1 голос
/ 06 декабря 2011

Чтобы создать массив Arraypoints, вы можете сделать:

Arraypoint arr[8];

Для доступа к элементу:

arr[i]

вернет i '-ый элемент Arraypoint

arr[i].variable[j]

вернет j '-ую точку в элементе

arr[i].variable[j].x

вернет x координату этой точки.

1 голос
/ 06 декабря 2011
struct Arraypoint arraypoints[8];

это то, что вы ищете, я думаю.Чтобы использовать их:

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

Это не так красиво, хотя

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

Возможно лучше?Хотя не знаю, что именно вы ищете.

0 голосов
/ 09 декабря 2011

Итак, я понял, почему не могу объявить свой массив как таковой,

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. Так Я должен создать переменные типа точка для хранения (x, y), а затем я мог бы сохранить эту переменную в точке массива.

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

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

Только для тех, кто в будущем сталкивается с той же проблемой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...