实现标准库顺序表(无迭代)
#include <iostream>
using namespace std;
template <typename T>
class myvector
{
public:
T *first ;
T *last ;
T * end ;
public:
//二倍扩容
void expand()
{
if(this->end == this->last)
{
int size = this->last - this->first;
T *p = new T[2*size];
memcpy(p,this->first,size);
delete [] this->first;
this->first = p;
this->end = this->first+2*size;
this->last = this->first+size;
}
}
//无参构造
myvector( )
{
first = new T[20] ;
last = this->first;
end = this->first+20;
}
//析构函数
~ myvector( )
{
delete []this->first;
}
//拷贝构造
myvector(const myvector & other )
{
int size= (other.last - other.first) ;
first = new T[size] ;
last = this->first;
end = this->first+size;
other.last = other.first;
for(int i = 0;i <size ;i++)
{
*(this->last) = *(other.last);
this->last++;
other.last++;
}
}
//拷贝赋值 迭代8写
//尾插
void push_back(T n)
{
expand();
*(this->last) = n;
this->last++;
}
//尾删
void popback()
{
this->last--;
}
//返回第一个元素的引用
T &front()
{
return *(this->first);
}
//返回最后一个元素的引用
T &back()
{
return *(this->last-1);
}
//求实际数据个数函数
int size()
{
return this->last - this->first;
}
//清空函数
void clear()
{
this->last = this->first;
}
//判空
bool empty()
{
return first == last;
}
//判满
bool full()
{
return end == last;
}
//按位置查找
T at(int n)
{
int size= (this->last - this->first) ;
if(n<0 || n >= size)
{
cout<<"越界"<<endl;
return 0;
}else
{
return *(this->first+n);
}
}
};
int main()
{
myvector<int> d1; //无参构造
//尾插
for(int i = 0;i<6;i++)
{
d1.push_back(i);
}
//按位置查找,遍历
for(int i = 0;i<d1.size();i++)
{
cout<<d1.at(i)<<" ";
}
cout<<endl;
//尾删
d1.popback();
//最后一个元素引用
d1.back() = 9;
//第一个元素引用
d1.front() = 8;
for(int i = 0;i<d1.size();i++)
{
cout<<d1.at(i)<<" ";
}
cout<<endl;
//清空
d1.clear();
//判空
cout<<"是否为空 = "<<d1.empty()<<endl;
//判满
cout<<"是否为满 = "<<d1.full()<<endl;
d1.~myvector();
return 0;
}