仿照vector手动实现自己的myVector
代码:
- #include
- #define MAX 128
- using namespace std;
-
- template<typename T>
- class myVector
- {
- private:
- int num;
- T val;
- T *data; //数据域
- int V_size=MAX;
- public:
- myVector():data(new T[MAX]),num(0){} //无参构造
- myVector(int a,T b):num(a),val(b),data(new T[MAX]) //有参构造
- {
- //二倍扩容判断
- if(a>V_size)
- {
- V_size*=2;
- T *newdata=new T[V_size];
- for(int i=0;i
- newdata[i]=data[i];
- delete[] data;
- data=newdata;
- }
- {
- data[i]=b;
- }
- }
- ~myVector() //析构函数
- {
- delete[] data;
- data=NULL;
- }
- // 定义迭代器类
- class MyIterator {
- private:
- T* ptr;
- public:
- //有参构造
- MyIterator(T* p):ptr(p){}
- // *重载
- T& operator*()const {
- return *ptr;
- }
- // 前置++重载
- MyIterator& operator++() {
- ++ptr;
- return *this;
- }
- // 后置++重载
- MyIterator operator++(int) {
- MyIterator temp = *this;
- ++ptr;
- return temp;
- }
- // 前置--重载
- MyIterator& operator--() {
- --ptr;
- return *this;
- }
- // 后置--重载
- MyIterator operator--(int) {
- MyIterator temp = *this;
- --ptr;
- return temp;
- }
- // ==重载
- bool operator==(const MyIterator& other) const {
- return ptr == other.ptr;
- }
- // !=重载
- bool operator!=(const MyIterator& other) const {
- return ptr != other.ptr;
- }
- };
-
- //empty函数
- bool my_empty()
- {
- if(num==0)
- return true;
- return false;
- }
- //assign函数
- void my_assign(int num,T val)
- {
- delete data;
- for(int i=0;i
- {
- data[i]=val;
- }
- }
- //at函数
- T & my_at(int i)
- {
- if(i<0||i>=num)
- throw int(1);
- return data[i];
- }
- //front函数
- T & my_front()
- {
- return data[0];
- }
- //back函数
- T & my_back()
- {
- return data[num-1];
- }
-
- //erase函数
- MyIterator my_erase(MyIterator loc)
- {
- for(int i=loc;i
-1;i++) - data[i]=data[i+1];
- num--;
- }
- //insert函数
- MyIterator my_insert(MyIterator loc,const T n)
- {
- //二倍扩容判断
- if(num==V_size)
- {
- V_size*=2;
- T *newdata=new T[V_size];
- for(int i=0;i
- newdata[i]=data[i];
- delete[] data;
- data=newdata;
- }
- for(int i=num;i>loc-1;i--)
- data[i]=data[i-1];
- data[loc]=n;
- num++;
- }
- //begin函数
- MyIterator my_begin()
- {
- return MyIterator(data);
- }
- //end函数
- MyIterator my_end()
- {
- return MyIterator(data+num-1);
- }
- //push_back函数
- void push_back(const T &val)
- {
- //二倍扩容判断
- if(num==V_size)
- {
- V_size*=2;
- T *newdata=new T[V_size];
- for(int i=0;i
- newdata[i]=data[i];
- delete[] data;
- data=newdata;
- }
- data[num]=val;
- num++;
- }
- //pop_back函数
- void pop_back()
- {
- if(my_empty())
- return;
- num--;
- }
- //size函数
- size_t my_size()
- {
- return num;
- }
- //max_size函数
- size_t my_max_size()
- {
- return V_size;
- }
- //swap函数
- void my_swap(myVector &from)
- {
- myVector temp=this;
- this=from;
- from=this;
- }
-
-
- };
-
- int main()
- {
- myVector<int>S1(5,10);
- cout<
my_at(2)< - S1.pop_back();
- S1.push_back(20);
- cout<
my_back()< - cout<<*S1.my_begin()<
- cout<
my_size()< -
-
相关阅读:
python3:split()分割字符串为字符/字符串列表 2023-11-20
blender 快捷键记录
在CIFAR-10数据集上构建ResNet-18模型(pytorch版)
滚雪球学Java(44):掌握Java编程的关键:深入解析System类
Monaco Editor编辑器
合宙Air724UG LuatOS-Air LVGL API控件-窗口 (Window)
【scikit-learn基础】--『监督学习』之 贝叶斯分类
蘑菇街按关键字搜索mogujie商品 API 返回值说明
63 x的平方根
【JAVA】MyBatis-Plus插入/更新数据时如何自动更新字段时间
-
原文地址:https://blog.csdn.net/cwj442257772/article/details/132888379