自定义实现STL std :: vector

时间:2011-12-07 23:32:54

标签: containers copy-constructor

我正在为没有STL版本但是有模板支持的平台编写

我正在开发自己的std :: vector实现。

template<typename T> class Array
{
private:
    T * buffer;
    int count;
    int capacity;
public:
    Array() : buffer(0), count(0), capacit(0) { }
    ~Array() { if(buffer) delete[] buffer; }
    void IN_ANY Reserve(const int capacity)
    {
        if(capacity >= count)
        {
            T * newBuff = new T[capacity];
            if(capacity > count)
                memset(newBuff+count, 0, (capacity-count) * sizeof(T));
            memcpy(newBuff, buffer, count * sizeof(T));

            if(buffer)
                delete [] buffer;

            buffer = newBuff;
            this->capacity = capacity;
        }
    }
    // Other methods...
}

当T具有非trival构造函数,非trival销毁和重载operator =时,问题就出现了。然后,当为数组保留额外的内存时,将调用T的析构函数,而不是构造函数。但不是复制构造函数(因为我使用了memcpy)。我怎样才能改进Reserve方法?

3 个答案:

答案 0 :(得分:2)

不要自己滚动 - 使用STLPort。 http://sourceforge.net/projects/stlport/

这是一个免费且高度可移植的STL实现。

答案 1 :(得分:1)

如果您真的想知道如何实施STL的大部分内容,请参阅P.J. Plauger,Alexander Stepanov,Meng Lee和David R. Musser的“The C ++ Standard Template Library”一书。

除了使用和一些标准解释之外,还讨论了如何实现STL的大部分。这是一本相当古老的书,但对于了解幕后发生的事情非常有趣。

如果你不想知道如何做到这一点,但更多的只是想要它完成,那么请查看关于源伪造项目的其他答案之一。

答案 2 :(得分:-1)

我正在寻找的答案是安置新的