- #include
-
- using namespace std;
- template <typename V>
- class myVector
- {
- private:
- V *data; //存放数据
- int size; //数组长度
- int capacity; //容量大小
- public:
- myVector():size(0),capacity(1)
- {
- data = new V[capacity];
- cout<<"无惨构造"<
- }
- ~myVector()
- {
- delete []data;
- cout<<"析构函数"<
- }
- //判空
- bool empty();
- //返回指定的位置
- V& at(int index);
- //尾插
- void push_back(int value);
- //尾删
- void pop_back();
- //任意位置插入
- void insert(int pos,const V &value);
- //当前元素个数
- int get_size();
- //二倍扩容
- int expandCapacity();
-
-
-
-
- };
- //判空
- template <typename V>
- bool myVector
::empty() - {
- return size==0;
- }
- //当前元素的个数
- template <typename V>
- int myVector
::get_size() - {
- return size;
- }
- //二倍扩容
- template <typename V>
- int myVector
::expandCapacity() - {
- capacity *= 2;
- V *newdata = new V[capacity]; //定义一个新的指针指向原来的空间
- for(int i=0;i
- {
- newdata[i] = data[i];
- }
- delete []data; //将原来的空间释放掉
- data = newdata; //再把原来的指针更新为newdata,并且data指向了新的空间
- return capacity;
- }
-
- //尾插
- template <typename V>
- void myVector
::push_back(int value) - {
- if(size>=capacity)
- {
- expandCapacity(); //调用一次二倍扩容
- }
- data[size] = value;
- size++;
- }
- //尾删
- template <typename V>
- void myVector
::pop_back() - {
- if(size>0)
- {
- size--;
- }
- }
- //返回指定的位置
- template <typename V>
- V& myVector
::at(int index) - {
- if(index<0||index>=size)
- {
- throw V(1);
- }
- return data[index];
- }
- //任意位置插入
- template <typename V>
- void myVector
::insert(int pos,const V &value) - {
- if(pos<0||pos>size)
- {
- throw V("pos");
- }
- if(size>=capacity)
- {
- expandCapacity(); //调用一次二倍扩容
- }
- for(int i=size;i>pos;i--)
- {
- data[i+1] = data[i]; //整体后移
- }
- data[pos] = value;
- size++;
- }
- int main()
- {
- int i;
- myVector<int> v1;
- cout<
empty()<//1 - v1.push_back(80);
- v1.push_back(90);
- v1.push_back(5);
- for(i=0;i<static_cast<int>(v1.get_size());i++)
- {
- cout<
at(i)<<" "; - }
- cout<
- cout<
empty()< - cout<<"v1.cap = "<
expandCapacity()< - v1.push_back(80);
- v1.push_back(90);
- v1.push_back(5);
- cout<<"v1.cap = "<
expandCapacity()< - return 0;
- }

-
相关阅读:
力扣530 补9.12
shiro授权
任务调度线程池
电脑版剪映怎么倒放?
PCL 环境下安装配置CGAL 5.5
Mysql 锁
odoo16前端框架源码阅读——env.js
【Java】RestClient的使用
linux shell脚本学习指南
【Android笔记46】Android中如何自定义弹出框样式
-
原文地址:https://blog.csdn.net/cscssacd/article/details/132890542