手动实现Myvector
实现功能:构造 析构 拷贝 at() empty() full() front() back() size() clear() expand() push_back() pop_back()
#include <iostream>
using namespace std;
template<typename T>
class Myvector{
private:
T *first;
T *last;
T *end;
public:
Myvector(){}
Myvector(int s): first(new T(s)){
last = first;
end = first+s;
}
~Myvector(){
cout << "析构函数" << endl;
}
Myvector(const Myvector<T> &p){
int len = p.last-p.first;
int size = p.end-p.first;
this->first = new T[size];
memcpy(this->first, p.first, len*sizeof(T));
this->last = this->first+len;
this->end = this->first+size;
}
Myvector & operator=(const Myvector<T> & p){
this->first = p.first;
this->last = p.last;
this->end = p.end;
}
T &at(int n){
int size = last-first;
if(n > size || n < 0){
return NULL;
}
return first[n];
}
bool empty(){
return this->first == this->last;
}
bool full(){
return this->last == this->end;
}
T &front()const{
return *first;
}
T &back()const{
return *(last-1);
}
int size(){
return last-first;
}
void clear(){
last = first;
}
void expand(){
int size2 = this->end - this->first;
T *temp = new T[2*size2];
memcpy(temp, this->first, size2*sizeof(T));
delete []first;
first = temp;
last = first+size2;
end = first+2*size2;
}
void push_back(const T val){
if(this->full()){
this->expand();
}
*last = val;
last ++;
}
void pop_back(){
if(this->empty()){
return;
}
--last;
}
void display(){
T *mid = first;
while(mid < last){
cout << *mid << " ";
mid++;
}
cout << endl;
}
};
int main()
{
Myvector<int> vec(6);
vec.push_back(6);
vec.push_back(7);
vec.push_back(8);
vec.display();
vec.pop_back();
vec.display();
return 0;
}