Как бы я создал структуру, которая позволяет мне определять несколько объектов с несколькими значениями? - PullRequest
1 голос
/ 28 июня 2011

Мне нужно создать структуру, которая позволяет мне определять x количество точек (количество точек, изменяющихся во время выполнения) в трехмерной системе координат.Каждая точка имеет значения x, y и z.Пока у меня есть такая базовая структура, но мне нужно, чтобы она имела несколько точек, каждая со своими значениями.

struct point {
        int point_num;
        double x;
        double y;
        double z;
};

Спасибо!

Ответы [ 4 ]

4 голосов
/ 28 июня 2011

Если point_num - это несмежный, но уникальный идентификатор, вы можете использовать std::map<int, point> и удалить идентификатор из структуры.Таким образом, вы получите O (log (N)), используя индекс.

Если значения point_num являются уникальными и непрерывными, используйте std::vector<point> - снова поле id является лишним, так как расположение в векторе обеспечивает индексирование для вас.

Считайтебит на STL, особенно контейнеры , прежде чем идти намного дальше.

2 голосов
/ 28 июня 2011

Используйте контейнер. std::vector<point> будет самым простым. Если дубликатов нет, используйте std::set<point>.

1 голос
/ 28 июня 2011

Вы, вероятно, должны создать структуру, которая представляет одну точку и иметь массив или вектор точек.

Но, если по какой-то причине это должна быть одна структура, вы можете сделать:

#include <vector>
struct point {
        double x;
        double y;
        double z;
};

struct x_points {
        vector<point> v;
};

Или вы можете определить point внутри x_points:

#include <vector>
struct x_points {
        struct point {
            double x;
            double y;
            double z;
        };

        vector<point> v;
};
1 голос
/ 28 июня 2011

Вы можете использовать vector, стандартный контейнер C ++:

#include <vector>
using namespace std;

int main() {
    vector<point> points;
    for (int i = 0; i < numberOfPoints; ++i) {
        point p = {i, ..., ..., ...}; // Obtain coordinates somehow (with stdin, rand(), or whatever you want)
        points.push_back(p);
    }
    return 0;
}

Если вам нужно, вы можете обернуть vector в структуру или класс.

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