仿照系统的vector,手动实现一个my_vector。
- #include
-
- using namespace std;
-
- template<typename T> // 模板类: template
- class my_vector
- {
- private:
- T *first;
- T *end; // 大小
- T *last; //当前
- public:
- my_vector(int size = 2)// 构造函数
- {
- first = new T[size]; //第一次申请空间
- last = first; // 说明为空(当前指针)
- end = first+size; // 尾指针
- cout<<"构造函数"<
- }
-
- ~my_vector()// 析构函数
- {
- delete []first; // 数组的空间释放
- first = last = end = nullptr;
- cout<<"析构函数"<
- }
-
- my_vector(const my_vector& R)// 拷贝构造函数
- {
- //计算出原空间的尺寸
- int len = R.last - R.first; // 当前尺寸
- int size = R.end - R.first; // 尾尺寸
-
- this->first = new T[size]; // 申请空间(尾)
- memcpy(this->fist, R.first, len*sizeof(T)); // 需要拷贝的尺寸(当前)
-
- // 更新指针指向
- this->last = this->first+len; // 当前
- this->end = this->first+size; // 尾
- cout<<"拷贝构造函数"<
- }
-
- bool empty() // 判空
- {
- return this->first == this->last;
- cout<<"判空"<
- }
-
- bool full() // 判满
- {
- return this->end == this->last;
- cout<<"判满"<
- }
-
- void greater() //扩容
- {
- int size = this->end - this->first; //当前尺寸
- T* temp = new T [2*size]; // 更新空间尺寸
- memcpy(temp, this->first, size*sizeof(T));// 更新内容(既然扩容,肯定满的)
-
- delete []first; //释放旧空间
- first = temp; // 更新指针指向
- last = first+size; // 当前指针指向尾部
- end = first+2*size;
- cout<<"扩容"<
- }
-
- void push_back(const T val) // 尾插
- {
- if(this->full())
- {
- this->greater(); // 二倍扩容
- }
- *last = val;
- last++;
- //cout<<"尾插"<
- }
-
- void pop_back() // 尾删
- {
- if(this->empty())
- {
- return;
- }
- --last;
- cout<<"尾删"<
- }
-
- T front()const // 第一个元素
- {
- return *first;
- cout<<"第一个元素"<
- }
-
- int size_vector()
- {
- return end - first;
- cout<<"尺寸"<
- }
-
- int len_vector()
- {
- return last - first;
- cout<<"长度"<
- }
-
- T at(int pos)
- {
- if(pos<0 || pos>this->len_vector())
- {
- cout<<"at fail.";
- }
- cout<<" at:";
- return first[pos];
- }
- };
-
- int main()
- {
-
- my_vector<int> v1;
-
- for(int i=0; i<20; i++)
- {
- v1.push_back(i);
- // cout<
- cout<
size_vector()< - }
-
- for(int i=0; i<20; i++)
- {
- cout<
at(i)<<""; - }
- cout<
-
- return 0;
- }
测试结果:
-
相关阅读:
Caddy(球童-代理) 服务器
2023年江西省“振兴杯”工业互联网安全技术技能大赛暨全国大赛江西选拔赛 Write UP
项目九、无线组网
CSDN每日一题学习训练——Python版(输入起始和结束的正整数,求其两个正整数之间的偶数和、两数相加)
Python中 utf-8和gbk以及unicode编码
三十三、 如何评估数据处理者和境外接收方的技术和制度措施是否充分?
vue 如果2个/多个过滤器(filter)同时使用并传参数?
【Proteus仿真】【51单片机】防火防盗GSM智能家居设计
C++ Primer (第五版)第一章习题部分答案
TypeScript的类和对象
-
原文地址:https://blog.csdn.net/weixin_60354809/article/details/127825409