仿照vector手动实现自己的myVector
代码:
#include <iostream>
#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<num;i++)
newdata[i]=data[i];
delete[] data;
data=newdata;
}
for(int i=0;i<a;i++)
{
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<num;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<num-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<num;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<num;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<<S1.my_at(2)<<endl;
S1.pop_back();
S1.push_back(20);
cout<<S1.my_back()<<endl;
cout<<*S1.my_begin()<<endl;
cout<<S1.my_size()<<endl;
cout<<S1.my_max_size()<<endl;
return 0;
}
运行结果:
思维导图
本文含有隐藏内容,请 开通VIP 后查看