- #include
-
- using namespace std;
-
- template<typename T>
- class my_vector
- {
-
- int size;//可存储的容量大小
- int num;//当前存储的元素个数
- T* data;//存储数据的空间地址
-
- public:
- //无参构造函数
- my_vector();
- //有参构造函数
- my_vector(int n, const T m);
- //析构函数
- ~my_vector();
- //拷贝构造
- my_vector(const my_vector &other);
- //返回当前的容器大小
- int get_capacity();
- //获取容器中的元素个数
- int get_size();
- //判空函数
- bool empty();
- //添加函数
- void push_back(const T &val);
- //向容器中赋值
- void assign(int n,const T &val);
- //访问容器中的元素
- T& at(int loc);
- //清空容器中的元素
- void clear();
- //删除最后一个元素
- void pop_back();
- //返回起始位置的引用
- T& front();
- //返回最后一个位置的引用
- T& back();
- //返回第一个位置的迭代器
- T* begin();
- //返回末尾下一个位置的迭代器
- T* end();
- //任意插入
- T* insert(T* p, const T& n);
- //遍历
- void show();
- };
- int main()
- {
-
- my_vector<int> s1;
- s1.assign(7,1);
- cout<<"最大容量"<
get_capacity()< - cout<<"最后一个元素 "<
at(6)< - s1.insert(s1.end(),4);
- cout<<"最后一个元素 "<
back()< - cout<<"共有元素"<
get_size()< - cout<<"最后一个元素 "<
at(8)< - s1.show();
- cout<<"最大容量"<
get_capacity()< - s1.pop_back();
- s1.show();
- return 0;
- }
-
- //无参构造
- template<typename T>
- my_vector
::my_vector() - {
- size=6;
- num=0;
- data = new T[6];
- }
-
- //有参构造
- template<typename T>
- my_vector
::my_vector(int n, const T m) - {
- size = n;
- num = n;
- data = new T[n];
- for(int i=0;i
- {
- data[i]= m;
- }
- }
-
- template<typename T>
- my_vector
::~my_vector() - {
- delete []data;
- }
-
- //拷贝构造
- template<typename T>
- my_vector
::my_vector(const my_vector &other) - {
- size = other.size;
- num = other.num;
- data = new T[size];
-
- for(int i=0;i
- {
- data[i] = other.data[i];
- }
- }
-
- //当前容器的大小
- template<typename T>
- int my_vector
::get_capacity() - {
- return size;
- }
-
- template<typename T>
- int my_vector
::get_size() - {
- return num;
- }
-
- //判空函数
- template<typename T>
- bool my_vector
::empty() - {
- if(0 == num)
- {
- return true;
- }
- else
- return false;
- }
-
- //添加函数
- template<typename T>
- void my_vector
::push_back(const T &val) - {
- if(num
- {
- data[num] = val;
- num++;
- }
- else
- {
-
- T *temp = new T[2*size];
- size = 2*size;
- for(int i=0;i
- {
- temp[i] = data[i];
- }
- delete []data;//释放旧的空间
- data = temp;//指向新的空间
- temp = nullptr;
- data[num] = val;
- num++;
-
- }
- }
-
- //向容器中赋值
- template<typename T>
- void my_vector
::assign(int n, const T &val) - {
- //判断赋值的个数是否超过最大容量
- if(n>size)
- {
-
- delete [] data;
- data = nullptr;
- data = new T [n];
- size = n;
- num = n;
- //赋值
- for(int i=0;i
- {
- data[i] = val;
- }
- }
- else
- {
- num=n;
- for(int i=0;i
- {
- data[i] = val;
- }
- }
- }
-
- //访问元素
- template<typename T>
- T& my_vector
::at(int loc) - {
- if(loc > num || loc < 0)
- {
- throw T(1);//越界异常
- }
- else
- {
- return data[loc-1];
- }
- }
-
- //清空所有元素
- template<typename T>
- void my_vector
::clear() - {
- while (!empty())
- {
- pop_back();
- }
-
- }
-
- //删除末尾元素
- template<typename T>
- void my_vector
::pop_back() - {
- if(!empty())
- {
- data[num-1] = 0;
- num--;
- }
- else
- return ;
- }
-
- //返回第一个位置的引用
- template<typename T>
- T &my_vector
::front() - {
- return data[0];
- }
-
- //返回最后一个位置的引用
- template<typename T>
- T &my_vector
::back() - {
- return data[num-1];
- }
-
- //返回第一个位置的迭代器
- template<typename T>
- T *my_vector
::begin() - {
- return &data[0];
- }
-
- //返回末尾下一个位置的迭代器
- template<typename T>
- T *my_vector
::end() - {
- return &data[num];
- }
-
- //任意插入
- template<typename T>
- T *my_vector
::insert(T *p, const T &n) - {
- int j = 0;
- while(&data[0]+j != p) //寻找输入的是第几个数据的地址
- {
- j++;
- }
- if(num == size) //判断当前是否已满
- {
- int i = 0;
- T* data_new = new T[size*2]; //二倍扩容
- size = size * 2;
- while(i < num) //将旧区的数据内容赋给新区
- {
- data_new[i] = data[i];
- i++;
- }
- delete []data; //释放旧区
- data = data_new; //指向新区
- data_new = nullptr; //新指针置空
- //将指定位置之后的数据全都后移一位
- for(int k = num,i = j;i < num;i++,k--)
- {
- data[k] = data[k-1];
- }
- data[j] = n; //插入元素
- num++; //存储数量加1
- return &data[j];
- }
- else if(num < size)
- {
- //将指定位置之后的数据全都后移一位
- for(int k = num,i = j;i < num;i++,k--)
- {
- data[k] = data[k-1];
- }
- data[j] = n; //插入元素
- num++; //存储数量加1
- return &data[j];
- }
- }
-
- //遍历
- template<typename T>
- void my_vector
::show() - {
- int i = 0;
- for(;i < num;i++)
- {
- cout << data[i] << "\t";
- }
- cout << endl;
- }
-
相关阅读:
DTW学习(dynamic time warping)——思想、代码实现
RabbitMQ之TTL机制
[附源码]Python计算机毕业设计Django社区生活废品回收APP
js焦点处理的几种方式
Linux 简介 & 启动过程
LeetCode-278(Python)—— 第一个错误的版本
循环神经网络
电商rpa是什么意思?跟电商rpi是一个意思吗?
AI游戏外挂为何违法?
【D3.js】1.20-给 D3 元素添加工具提示
-
原文地址:https://blog.csdn.net/qq_53478460/article/details/132890983