Aso*_*ife 1 c++ pointers smart-pointers vector c++11
我已经阅读了很多问题,但没有人回答我的具体情况.
其实我有
std::vector<Point2Dd> points;
std::vector<Triangle> triangles;
Run Code Online (Sandbox Code Playgroud)
Point2Dd 是一个2D点的类,指定它的实现方式并不重要.
然而三角实现如下:
class Triangle{
public:
Triangle();
Triangle(Point2Dd* p1, Point2Dd* p2, Point2Dd* p3);
// Getter & setter
private:
Point2Dd* vA = nullptr;
Point2Dd* vB = nullptr;
Point2Dd* vC = nullptr;
}
Run Code Online (Sandbox Code Playgroud)
也就是说,作为点向量的三点.
实际上它工作得很好,但我想:如果我在向量中添加另一个点,我的向量会更改所有内存地址吗?我的所有三角形都将由无效地址组成.
我读过关于使用的内容,std::unique_ptr<Point2Dd>但我认为这不是最好的方法.
你有什么解决方案吗?谢谢 :)
---编辑1 ---
为了澄清我的问题,我解释了我想要解决的问题.我正在做一个增量的Delaunay三角测量(没问题).所以我必须每次添加一次并更新我的三角测量.
所以我认为将三角形作为指向我的点的三个指针.我还有一个dag(节点 - >三个孩子的三角形)和一个保存相邻三角形的结构.
这就是为什么我认为总是使用指针,所以我不必在三个不同的结构中复制相同的点.
这就是我需要解决此问题以防止内存重新分配的原因.
是的,因为在此之后我有一个非常繁重的算法,所以我需要尽可能地优化所有...
在这种情况下,请从数据副本开始.
struct Triangle{
Triangle();
Triangle(Point2Dd p1, Point2Dd p2, Point2Dd p3);
// Getter & setter
private:
Point2Dd vA, vB, vC;
};
Run Code Online (Sandbox Code Playgroud)
虽然测量是唯一可以确定的方法,但基于指针的解决方案中固有的缓存局部性和间接内存访问的丢失几乎肯定会导致运行时间慢一个数量级.