c++ 优化的动态数组 Vector

#include<iostream>
#include<vector>
#include<string.h>
using namespace std;

class dynamic_int_array{
    int * p=nullptr;
    int size =0;
    int capacity=0;
    public:
    dynamic_int_array()=default;
    dynamic_int_array(unsigned int s){
        if(s>0 && s<10){
            capacity =10;
            p = new int[capacity];
            /*
            int i;
            for(i=0;i<s;i++)
                p[i]=0;
                */
            memset(p,0,capacity);
            size =s;
        }else{
            capacity =2*s;
            p = new int[capacity];
            memset(p,0,capacity);
            size=s;
        }
    }
    ~dynamic_int_array(){
        if(p)delete []p;
    }
    int &operator[](int pos)
    {
        return p[pos];
    }
    bool push_back(int value)
    {
        if(size+1> capacity){
            int * new_p = new int[capacity*2];
            memcpy(new_p,p,capacity);
            delete[]p;
            p =new_p;
            p[size++]=value;
        }else{
            p[size]=value;
        }
        return true;
    }
    bool insert(int pos,int value)
    {
        if(pos <0 || pos > size)
            return false;
        if(size +1>capacity){
            int * new_p =new int[capacity*=2];
            memcpy(new_p,p,pos*4);
            memcpy(&new_p[pos+1],p,4*(size-pos));
            new_p[pos]=value;
            delete[]p;
            p=new_p;
            size++;

        }else{
            int i;
            for(i=size;i>pos;i--)
                p[i] = p[i-1];
            p[pos] = value;
            size++;
        }
        cout<<"insert after:"<<endl;
        cout<<"size="<<size<<endl;
        cout<<"capacity="<<capacity<<endl;
    }
    bool remove(int pos){}
};

int main()
{
    dynamic_int_array di(10);

    di[0] = 100;
    di[1] = 200;
    di[2] = 300;
    di.insert(0,900);
    di.push_back(500);
    int i;
    for(i=0;i<20;i++)
        cout<<di[i]<<" ";
    cout<<endl;
    //900 100 200 300 0 0 200
    //di.remove(3);
    //900 100 200  0 0 200
    cout<<sizeof(vector<int>)<<endl;
}
原文地址:https://www.cnblogs.com/Sico2Sico/p/5384245.html