我有以下用于存储经络和纬线的数据结构。
每个制图点存储:
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;
 };
恐怕这个提议的模型不好。两个班级之间仍然有自行车参考......有人可以帮我改进它吗?谢谢...