如何为STL向量创建自己的模板?

时间:2015-11-11 19:18:49

标签: c++ stl

如何为STL矢量创建自己的模板? 这很好,或者我需要其他任何东西???

template<class T>
class MainVector {
private:
T *m_ptv;
int m_size,
    m_index;
public:
MainVector() : m_size(0), m_index(0), m_ptv(NULL) { }
MainVector(int);
~MainVector() { delete[] m_ptv; }
void addOneElem(const T &);
T *getVecor();
int getSizeVector();
ostream &operator<<(ostream &os, const MainVector &vect);
};

1 个答案:

答案 0 :(得分:0)

您需要在内存中分配缓冲区并使用一些初始缓冲区大小(超出空间时重新分配和复制以确保内存是连续的,如果需要),而不是在类型上调用构造函数(new)。

缓冲区的大小计算方式与sizeof(T) * desiredMaxItems类似。

您必须实现一个迭代器类型,该类型能够reinterpet_cast并在此内存块中偏移到T*值。偏移量有点是通过计算sizeof(T) * index创建的。

向量类的

erase方法可以(可选)在内部缓冲区中的项偏移量处为零sizeof(T)个字节,然后在擦除值之后向下移位({ {1}})并更新内部-1字段,以避免&#34;清空#34;内部缓冲区中的空格。

如果您不存储itemCount数据,而是直接存储类似T字段的迭代器实例,则可以跳过此步骤。在最后一种情况下,bool exists设置为false,此项表示它不存在。在某些情况下,这样的缓冲区可以更快地工作。