#include <iostream>
#include <cstring>
using namespace std;
template <typename T>
class Myvector
{
T * frist;
T * last;
T * end;
int n;
public:
//无参构造
Myvector()
{
frist = new T;
end = frist + 1;
last = frist;
n = end - frist;
}
//析构函数
~Myvector()
{
delete [] frist;
frist = nullptr;
last = nullptr;
end = nullptr;
n = 0;
}
//拷贝构造
Myvector(const Myvector &other)
{
n = other.last-other.frist;
frist = new T[n];
end = frist + n;
last = frist + n-1;
memcpy(frist, other.frist, n*sizeof (T));
}
//拷贝赋值
Myvector operator=(const Myvector &other)
{
n = other.last-other.frist;
frist = new T[n];
end = frist + n;
last = frist + n-1;
memcpy(frist, other.frist, n*sizeof (T));
}
//size()
int size(){ return last-frist; }
//二倍扩容
void expand()
{
n*=2;
T * temp = new T[n];
memcpy(temp, frist, (n/2)*sizeof (T));
delete [] frist;
frist = temp;
temp = nullptr;
end = frist + n;
last = frist+n/2;
}
//尾插
void push_back(T val)
{
if(last == end)
this->expand();
*last++ = val;
}
//尾删
void pop_back()
{
if(last == frist)
return;
last --;
}
//清空
void clear(){last = frist;}
//判空
bool empty() {return last==frist? true: false;}
//判满
bool full() {return last==end? true: false;}
//访问头元素
T & front() {return *frist;}
//访问尾元素
T & back() {return *(end-1);}
//按位置访问
T & at(int pos){return *(frist+pos);}
};
int main()
{
Myvector<int> v1;
v1.push_back(99);
v1.push_back(666);
v1.push_back(222);
v1.push_back(233);
cout << v1.at(2) <<endl;
cout << v1.front() <<endl;
cout << v1.back() <<endl;
return 0;
}
根据vector写myvector模板类
最新推荐文章于 2024-09-02 20:21:30 发布
该文章展示了一个用C++实现的模板类Myvector,它具有动态数组的功能,包括无参构造、析构、拷贝构造、拷贝赋值、扩容、插入、删除、清空、访问元素等操作。示例代码中展示了如何使用这个类进行元素的添加和访问。
摘要由CSDN通过智能技术生成