如何为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);
};
答案 0 :(得分:0)
您需要在内存中分配缓冲区并使用一些初始缓冲区大小(超出空间时重新分配和复制以确保内存是连续的,如果需要),而不是在类型上调用构造函数(new
)。
缓冲区的大小计算方式与sizeof(T) * desiredMaxItems
类似。
您必须实现一个迭代器类型,该类型能够reinterpet_cast
并在此内存块中偏移到T*
值。偏移量有点是通过计算sizeof(T) * index
创建的。
erase
方法可以(可选)在内部缓冲区中的项偏移量处为零sizeof(T)
个字节,然后在擦除值之后向下移位({ {1}})并更新内部-1
字段,以避免&#34;清空#34;内部缓冲区中的空格。
如果您不存储itemCount
数据,而是直接存储类似T
字段的迭代器实例,则可以跳过此步骤。在最后一种情况下,bool exists
设置为false,此项表示它不存在。在某些情况下,这样的缓冲区可以更快地工作。