仿照vector手动实现自己的myVector,最主要实现二倍扩容功能
- #include <iostream>
-
-
- using namespace std;
-
-
- template <typename T>
- class Myvector
- {
- T *data; //存储数据的数组
- int len; //当前数组的长度
- int mycapa; //容纳数据的总容量
-
- public:
- //构造函数
- Myvector():data(NULL),len(0),mycapa(0){cout<<"无参构造"<<endl;}
- Myvector(int n, T a)
- {
- data =new T[n];
- len = n;
- mycapa = n;
- for(int i=0;i<n;i++)
- {
- data[i]=a;
- }
- cout<<"有参构造"<<endl;
-
- }
-
-
- //判空
- bool my_empty()
- {
- if(0 == len)
- {
- return 0;
- }
- return 1;
- }
-
- //判满
- bool my_full()
- {
- if(len == mycapa)
- {
- return 0;
- }
- return 1;
- }
-
- //在末尾插入一个元素
- int mypop_back(T a)
- {
- if(0 == mycapa)
- {
- mycapa = 1;
- data = new T[1];
- }
- else if(len+1 > mycapa) //如果数组长度大于最大容量,最大容量二倍扩容
- {
- mycapa = 2*len;
- int *p = new T[mycapa];
- for(int i=0; i<len; i++)
- {
- p[i] = data[i];
- }
- delete []data;
- data = p;
- }
- data[len] = a;
- len++;
- }
-
- //任意插入
- void my_insert(int pos, T a)
- {
- if(0 == mycapa)
- {
- mycapa = 1;
- data = new T[1];
- data[0] = a;
- }
- else if(len+1 > mycapa)
- {
- mycapa = 2*len;
- int *p = new T[mycapa];
- for(int i=0; i<pos; i++)
- {
- p[i] = data[i];
- }
- p[pos] = a;
- for(int i=pos; i<len; i++)
- {
- p[i+1] = data[i];
- }
- delete []data;
- data = p;
- }
- else
- {
- for(int i=len-1; i>=pos; i--){
- data[i+1] = data[i];
- }
- data[pos] = a;
- }
- len++;
- }
-
- //移除最后一个元素
- void mypop_back()
- {
- len--;
- cout<<"移除最后一个元素成功"<<endl;
- }
-
- //删除指定位置元素
- void my_erase(int pos)
- {
- if(my_empty() && pos>len)
- {
- cout<<"删除失败"<<endl;
- }
- for(int i=pos; i<len; i++)
- {
- this->data[i-1] = this->data[i];
- }
- len--;
- cout<<"删除指定位置元素成功"<<endl;
- }
-
- //展示
- void my_show()
- {
- cout<<"展示元素";
- for(int i=0; i<len; i++)
- {
- cout<<data[i];
- cout<<" ";
- }
- cout<<endl;
- }
-
- //返回能容纳的最大容量
- void my_capacity()
- {
- cout<<"最大容量为"<<mycapa<<endl;
- }
-
- //返回指定位置元素
- void my_at(int pos)
- {
- cout<<"第"<<pos<<"个元素是"<<data[pos]<<endl;
- }
-
- //清空所有元素
- int my_clear()
- {
- cout<<"已全部清空"<<endl;
- return len=0;
- }
-
-
- };
-
-
- using namespace std;
-
- int main()
- {
- Myvector<int> m(4,6); //有参构造创建了4个元素,每个元素都是6
- m.my_show();
-
- m.mypop_back(7); //尾插
- m.mypop_back(8);
- m.my_show();
- m.my_capacity(); //返回最大容量,此时为8
-
- cout<<"***************************************"<<endl;
-
- m.my_insert(5,9); //任意位置插入元素
- m.my_show();
-
- cout<<"***************************************"<<endl;
-
- m.my_erase(5); //任意位置删除元素
- m.my_show();
-
- cout<<"***************************************"<<endl;
-
- m.mypop_back(); //移除最后一个元素
- m.my_show();
-
- cout<<"***************************************"<<endl;
-
- m.my_at(2);
-
- m.my_clear(); //清空
- m.my_show();
-
-
-
- return 0;
- }
