vector容器内部实现机理(源代码和测试代码)

//Vector.h,个人实现的头文件,源文件引用时用#include "Vector"
#ifndef VECTOR_INCLUDED
#define VECTOR_INCLUDED
template<typename Object>
class Vector
{
public:
    explicit Vector(int initSize = 0):theSize(initSize),theCapacity(initSize + SPARE_CAPACITY)
    {
        objects = new Object[theCapacity];
    }
    Vector(const Vector &rhs) : objects(NULL)
    {
        operator =(rhs);
    }
    ~Vector()
    {
        delete [] objects;
    }
    const Vector & operator = (const Vector &rhs)
    {
        if(this != &rhs)
        {
            delete [] objects;
            theSize = rhs.size();
            theCapacity = rhs.theCapacity;
            objects = new Object[capacity()];
            for(int k=0;k<size();k++)
            {
                objects[k] = rhs.objects[k];
            }
        }
        return *this;
    }
    void resize(int newSize)
    {
        if(newSize > theCapacity)
        {
            reserve(newSize * 2 + 1);
        }
        theSize = newSize;
    }
    void reserve(int newCapacity)
    {
        if(newCapacity < theSize)
        {
            return ;
        }
        Object *oldArray = objects;
        objects = new Object[newCapacity];
        for(int k=0;k<theSize;k++)
        {
            objects[k] = oldArray[k];
        }
        theCapacity = newCapacity;
        delete[] oldArray;
    }
    Object &operator[] (int index)
    {
        return objects[index];
    }
    const Object &operator[] (int index) const
    {
        return objects[index];
    }
    bool empty() const
    {
        return size() == 0;
    }
    int size() const
    {
        return theSize;
    }
    int capacity() const
    {
        return theCapacity;
    }
    void push_back(const Object &x)
    {
        if(theSize == theCapacity)
        {
            reserve(2 * theCapacity + 1);
        }
        objects[theSize++] = x;
    }
    void pop_back()
    {
        theSize--;
    }
    const Object & back() const
    {
        return objects[theSize - 1];
    }
    typedef Object * iterator;
    typedef const Object *const_iterator;
    iterator begin()
    {
        return &objects[0];
    }
    const_iterator begin() const
    {
        return &objects[0];
    }
    iterator end()
    {
        return &objects[size()];
    }
    const_iterator end() const
    {
        return &objects[size()];
    }
    enum {SPARE_CAPACITY = 16};
private:
    int theSize;
    int theCapacity;
    Object *objects;
};
#endif // VECTOR_INCLUDED


下面为测试代码,使用起来和include<vector>STL一样:

//main.cpp
#include<iostream>
#include<cmath>
#include"Vector"
using namespace std;
int main()
{
    Vector<int> a;
    a.push_back(1);
    a.push_back(100);
    a.push_back(5);
    Vector<int>::iterator itr;
    itr = a.begin();
    while(itr != a.end())
    {
        cout<<*itr++<<endl;
    }
    a.pop_back();
    cout<<"current length is:"<<a.size()<<endl;
    itr = a.begin();
    while(itr != a.end())
    {
        cout<<*itr++<<endl;
    }
    if(!a.empty())
    {
        cout<<"is not empty!"<<endl;
    }
    else
    {
        cout<<"is empty"<<endl;
    }
    cout<<"current last data is :"<<*a.end()<<endl;
    cout<<"current first data is:"<<*a.begin()<<endl;
}


参考文献:<Data Structures and Algorithm Analysis in c++ Third Edition>



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值