题目:
代码:
#include <iostream>
#include <cstring>
using namespace std;
template <class T>
class my_vector
{
private:
T *front;
T *end;
T *back;
public:
my_vector():front(NULL),end(NULL),back(NULL){}
my_vector(int n,T x):front(NULL),end(NULL),back(NULL){
int i=0;
for(i=0;i<n;i++){
push_back(x);
}
}
my_vector(T *a,T *b):front(NULL),end(NULL),back(NULL){
int *i=0;
for(i=a;i!=b;i++){
push_back(*i);
}
}
const T &get_front()const{
return front;
}
const T &get_end()const {
return end;
}
const bool empty()const{
return front==end;
}
const int size()const{
return end-front;
}
const int capacity()const {
return back-front;
}
void push_back(const T &x){
if(front==NULL){
front=new T;
end=back=front;
*end=x;
end++;
back++;
}else{
if(end==back){
T *t;
int temp=back-front;
t=new T[temp];
memcpy(t,front,temp*sizeof(T));
delete front;
front=new T[2*temp*sizeof(T)];
end=front+temp;
back=front+2*temp;
memcpy(front,t,temp*sizeof(T));
delete t;
}
*end=x;
end++;
}
}
const int pop_back(){
if(end==front){
return -1;
}else{
end--;
}
return 0;
}
T &at(const int &n)const{
return front[n];
}
//[]运算符重载
T &operator [](const int &n)const {
return front[n];
}
const T &my_front()const{
return *front;
}
const T &my_back()const{
return *(end-1);
}
void clear(){
end=front;
}
const T *my_begin(){
return front;
}
const T *my_end()const{
return end;
}
};
int main()
{
my_vector<int> v1;//无参构造一个vector对象
//判断容器内是否为空
if(v1.empty()){
cout<<"empty"<<endl;
}else{
cout<<"not empty"<<endl;
}
//求容器大小
cout<<"size of v1:"<<v1.size()<<endl;
//求容器当前最大容量
cout<<"capacity of v1:"<<v1.capacity()<<endl;
//进行尾插
for(int i=0;i<5;i++){
v1.push_back(i+10);
cout<<"capacity of v1:"<<v1.capacity()<<endl;
}
cout<<"size of v1:"<<v1.size()<<endl;
//尾删
v1.pop_back();
cout<<"size of v1:"<<v1.size()<<endl;
for(int i=0;i<v1.size();i++){
// cout<<v1.at(i)<<" ";
cout<<v1[i]<<" ";
}
cout<<endl;
//找到第一个和最后一个
cout<<"the first one:"<<v1.my_front()<<endl;
cout<<"the last one:"<<v1.my_back()<<endl;
//使用迭代器遍历容器
for(auto it=v1.my_begin();it!=v1.my_end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
for(int i=0;i<v1.size();i++){
cout<<v1.at(i)<<" ";
// cout<<v1[i]<<" ";
}
cout<<endl;
//清空所有元素
v1.clear();
cout<<"size of v1:"<<v1.size()<<endl;
cout<<"*********************************************************"<<endl;
my_vector<char> v2(5,'K');
for(int i=0;i<v2.size();i++){
cout<<v2.at(i)<<" ";
}
cout<<endl;
cout<<"*********************************************************"<<endl;
int arr[10]={2,3,6,8,4,5,1,9,37,7};
my_vector<int> v3(arr, arr+6);
for(int i=0;i<v3.size();i++){
cout<<v3.at(i)<<" ";
}
cout<<endl;
return 0;
}
测试: