У меня есть следующая структура данных для хранения меридианов и параллелей.
Каждый картографический пункт хранит:
A] географические и пространственные координаты, картографические искажения и т. Д.
B] указатель на север / юг / восток / западный узел.
Позволяет хранить отношения между точками, прежде всего их принадлежность к
меридиан / параллель ...
class Node2DCart
{
protected:
//Coordinates of the point
double lat;
double lon;
double lattrans;
double lontrans;
double x;
double y;
.....
//Pointers to adjacent points in geographic network
Node2DCart *left;
Node2DCart *right;
Node2DCart *top;
Node2DCart *bottom;
.....
};
Структура данных для меридиана хранит долготу меридиана, начало
точка и конечная точка меридиана и количество точек.
class Meridian
{
private:
unsigned int points_count;
double longitude;
Node2DCart *start;
Node2DCart *end;
....
};
Все точки хранятся в списке узлов:
typedef std::vector<Node2DCart*> TNodes2DCartList;
class Node2DCartList
{
protected:
TNodes2DCartList nodes;
...
};
Но существует большая проблема при написании конструктора копирования для Node2DList. Между Meridian / Parallel и Node2Dlist существует циклическая зависимость.
Конструктор копирования использует std::map
и заменяет старые точки и ссылки новыми, это не проблема реализации ... Однако указатели начинаются / заканчиваются от точки класса Meridian до точек из старого Node2DList ... Конструктор копирования Node2DList должен уведомить все меридианы, указывающие на старые точки Node2DList, и изменить все указатели на новые точки Node2DList. Эта модель не позволяет этого.
Возможным решением было бы добавление двух указателей, указывающих на меридиан, и параллельная точка принадлежит:
class Node2DCart
{
protected:
//Coordinates of the point
double lat;
double lon;
double lattrans;
double lontrans;
double x;
double y;
.....
//Pointers to adjacent points in geographic network
Node2DCart *left;
Node2DCart *right;
Node2DCart *top;
Node2DCart *bottom;
.....
Meridian *m;
Parallel *p;
};
Боюсь, что эта предложенная модель не годится. Между двумя классами все еще есть циклические ссылки ... Кто-нибудь поможет мне улучшить его? Спасибо ...