C++day7

仿照vector手动实现自己的myVector,最主要实现二倍扩容功能

#include 
#define max 32
using namespace std;

template 
class myVector
{
private:
    T data[max];
    int len;
public:
    myVector();
    myVector(int num,T val);
    ~myVector();
    myVector(const myVector &other);
    myVector( T* start, T* end );
    bool my_empty();      //判空
    bool my_full();       //判满
    int capacity();       //返回当前vector在重新进行内存分配以前所能容纳的元素数量.
    void push_back(T val);//添加元素
    void pop_back();      //移除最后一个元素
    int size();           //求容器真实大小
    void assign(int num,T val);//赋num个值为val的元素到vector中
    T &at(int loc);       //返回当前Vector指定位置loc的元素的引用
    T &front();           //返回起始位置的引用
    T &back();            //返回最后一个位置的引用
    T* begin();           //返回起始元素迭代器
    T* end();             //返回末尾下一个位置的迭代器
    void insert(int loc,T val);//指定位置插入元素
    void clear();         //清空vector中所有元素

};

int main()
{
    myVector V1(5,9);
    for(int i=1;i<=V1.size();i++){
        cout<
myVector::myVector(){
    cout<<""<
myVector::myVector(int num,T val):len(num){
    for(int i=0;ilen;i++){
        this->data[i]=val;
    }
}
//析构函数
template 
myVector::~myVector(){
    free(data);
    len=0;
    cout<<"析构函数"<
myVector::myVector(const myVector &other):len(other.len)
{
    for(int i=0;idata[i]=other.data[i];
    }
}

template 
myVector::myVector( T* start, T* end )
{
    while(start!=end){
        push_back(*start);
        start++;
    }

}
//判空
template 
bool myVector::my_empty()
{
    if(0==this->len)
        return true;
    else
        return false;
}
//判满
template 
bool myVector::my_full()
{
    if(max==this->len)
        return true;
    else
        return false;
}
//返回当前vector在重新进行内存分配以前所能容纳的元素数量
template 
int myVector::capacity()
{
    int s=size();
    if(s>max)
        return 2*s;
    else
        return s;
}
//添加元素
template 
void myVector::push_back(T val)
{
    this->data[this->len]=val;
    this->len++;
}
//移除最后一个元素
template 
void myVector::pop_back()
{
    this->len--;
}
//求容器真实大小
template 
int myVector::size()
{
    return this->len;
}
//赋num个值为val的元素到vector中
template  
void myVector::assign(int num,T val)
{
    for(int i=0;idata[i]=val;
    }
}
//返回当前Vector指定位置loc的元素的引用
template 
T &myVector::at(int loc)
{
    return this->data[loc-1];
}
//返回起始位置的引用
template 
T &myVector::front()
{
    return this->data[0];
}
//返回最后一个位置的引用
template 
T &myVector::back()
{
    return this->data[len-1];
}
//返回起始元素迭代器
template 
T* myVector::begin()
{
    T *p=this->data;
    return p;
}
//返回末尾下一个位置的迭代器
template 
T* myVector::end()
{
    T* p=this->data;
    for(int i=1;i
void myVector::insert(int loc,T val)
{
    for(int i=this->len-1;i>=loc;i--){
        this->data[i+1]=this->data[i];
    }
    this->data[loc]=val;
    this->len++;
}
//清空vector中所有元素
template 
void myVector::clear()
{
    this->len=0;
    cout<<"已清空"<

思维导图

C++day7_第1张图片

你可能感兴趣的:(c++,java,开发语言)