У меня есть следующая структура данных для хранения меридианов и параллелей.Модель данных, циклические ссылки
Каждая точка хранит картографические:
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
и заменяет старые точки и ссылки на новые, это не проблема реализации ... Однако указатели начинают/заканчиваются от класса Меридиан указывает на точки из старого 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;
};
Я боюсь, что эта предложенная модель не является хорошей. Есть еще велосипедные ссылки между двумя классами ... Кто-нибудь поможет мне улучшить его? Спасибо ...
Когда вы говорите 'Node2DList', вы имеете в виду' TNodes2DCartList', ' Node2DCartList' или что-то еще? – luke