zoukankan      html  css  js  c++  java
  • 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;
    }
    
  • 相关阅读:
    Python实现归并排序
    zip解决杨辉三角问题
    Python中协程、多线程、多进程、GIL锁
    Python copy(), deepcopy()
    Python collections的使用
    javascript中的类
    python3中的zip函数
    三数之和(Python and C++解法)
    两数之和(Python and C++解法)
    Python中list、dict、set、tuple的用法细节区别
  • 原文地址:https://www.cnblogs.com/Sico2Sico/p/5384245.html
Copyright © 2011-2022 走看看