- #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;
- }

-
相关阅读:
GlassFish内存马分析
QT day1
.L0CK3D来袭:如何保护您的数据免受致命攻击
力扣:19-删除链表的倒数第N个结点
ios ipa包上传需要什么工具
【Unity入门计划】基本概念(6)-精灵渲染器 Sprite Renderer
超前进位加法器
alb和clb区别
避坑手册 | JAVA编码中容易踩坑的十大陷阱
C语言——经典200道实例(11-15)
-
原文地址:https://blog.csdn.net/cscssacd/article/details/132890542