C ++数据结构(缓冲区)分层次地表示2D顶点,线段和三角形

时间:2014-04-11 11:36:40

标签: c++ algorithm buffer

我编写了一个表示元素缓冲区的模板化类。现在,我必须在此缓冲区中插入2D顶点(这很容易并且完成)。现在我想创建一个缓冲区,表示线段,顶点基于2D缓冲区顶点。例如在我的"顶点缓冲区"我插入了2个顶点。然后我创建一个"线段缓冲区",并插入一个线段。该线段末端由"顶点缓冲区"中的2个顶点表示。现在,如果我改变"顶点缓冲区"内的一个顶点的坐标,则线段坐标也必须改变。 它是一些层级结构的王者。 2D顶点< =线段< =三角形。

Mu缓冲类看起来像:

template <class T>
class Buffer
{
public:
    Buffer(Buffer& buffer);
    Buffer(size_t initialBufferSize = 1);
    ~Buffer();

    Buffer& operator=(const Buffer& buffer);
    T& Buffer::operator[](const int nIndex);

    void insertElement(T element);
    void deleteElement(size_t index);
    size_t count();

private:
    T* elements_;
    size_t elementsCount_;
    size_t bufferSize_;
    void resizeBuffer(size_t newBufferSize);
};

deleteElement方法:

template <class T>
void Buffer<T>::deleteElement(size_t index)
{
    if (index >= elementsCount_)
        throw "No element at specified index";
    if (elementsCount_-index-1 > 0)
        memcpy(elements_+index, elements_+index+1, (elementsCount_-index-1)*sizeof(T));
    elementsCount_--;
}

问题是当我从&#34;顶点缓冲区&#34;中删除一个顶点时。线段指向已删除顶点的指针将无效。我该如何处理这类情况?

基本上,我有一个顶点缓冲区,并希望根据我得到的顶点创建线段和三角形。

PS:线段结构如下所示:

struct LineSegment {
Buffer<Vertex>* buffer;
size_t indexOfVertexA, indexOfVertexB;
//Now if I want to access the lineSegment vertices, I use **lineSegment.buffer[indexOfVertexA]**
}

1 个答案:

答案 0 :(得分:0)

你应该看一下std :: shared_ptr:http://www.cplusplus.com/reference/memory/shared_ptr/

您应该根据数据结构的惯例来组织删除。

删除顶点 - &gt;涉及哪些细分市场 - &gt;哪个三角形。并删除所有引用