自己实现STL中的vector

编辑:谯胜平      分类:程序与算法      标签:vector,STL      发布时间:2021-03-25      浏览次数:760

#include<iostream>
#include<string>
#define default_size 8
using namespace std;
template <class ElemType>
class vector
{
    private:
        int _size;
        int _capacity;
        ElemType *elements;

    public:
        vector(){
            _size = 0;
            _capacity = default_size;
            elements = new ElemType[_capacity];
            cout << "构造函数" << endl;
        }

        vector(int newSize, ElemType value = false){
            _size = 0;
            _capacity = default_size;
            elements = new ElemType[_capacity];
            for(int i = 0; i < newSize; i++){
                push_back(value);
            }
        }
        
        //插入元素 
        void push_back(const ElemType &ref){
            if(_size == _capacity){
                reserve(_size * 2);
            }
            elements[_size++] = ref;
        }
    
        //清除末尾 
        void pop_back(){
            if(_size == 0) return;
            _size--;
        }    
        
        //清空
        void clear(){
            _size = 0;
        } 
        
        bool empty(){
            return _size;
        }
        
        //重载[]运算符
        ElemType& operator[](int pos){
            return elements[pos];
        } 
        
        //重载=运算符
        vector& operator = (const vector& ref){
            for(int i = 0; i < ref.size(); i++){
                push_back(ref[i]);
            }
            return this; 
        } 
        
        //返回元素个数 
        int size(){
            return _size;
        }
        
        //返回内存空间大小 
        int capacity(){
            return _capacity;
        }
        
        //重置元素个数大小 
        void resize(int newSize){
            if(newSize < 0) return;
            
            if(newSize > _capacity){
                reserve(newSize * 2);
            }
            _size = newSize;
        }
        
        //重置空间大小
        void reserve(int newCapacity){
            if(newCapacity <= _capacity) return;
            ElemType *newElements = new ElemType[newCapacity];
            //将原来的元素拷贝到新的数组中
            for(int i = 0; i < _size; i++){
                newElements[i] = elements[i];
            }  
            delete[] elements;
            elements = newElements;
            _capacity = newCapacity;
        } 
        
        //定义迭代器
        typedef ElemType *iterator;
        
        iterator begin(){
            return &elements[0];
        } 
        
        iterator end(){
            return &elements[_size];
        }
        
        //析构函数 
        ~vector(){}
};

int main(){
    vector<int> ve;
    cout << "vector insert elements: ";
    for(int i = 0; i < 18; i ++){
        ve.push_back(i);
        cout << i << " ";
    }
    cout << endl;
    
    cout << "vector insert answers: ";
    for(int i = 0; i < ve.size(); i++){
        cout << ve[i] << " ";
    }
    cout << endl;
    
    cout << "vector copy elements: ";
    vector<int> vb = ve;
    for(vector<int>::iterator it = vb.begin(); it != vb.end(); it++){
        cout << *it << " ";
    }
    cout << endl;
    
    cout << "vector size: " << vb.size() << " vector capacity: " << vb.capacity()<<endl;
    return 0;
}

运行结果:



看不清?换一个