C++手写容器

#ifndef PersonSet_hpp

#define PersonSet_hpp


#include <iostream>


#include "Person.hpp"

using namespace std;

class PersonSet

{

public:

    Person **p;

    int _size;

    int capacity;

    int index;

public:

    PersonSet();

    void add(Person& _p);

    ~PersonSet();

    int size();//得到实际的个数

    

    void  Reset();

    Person&NextElement();

    Person& operator[](int x);//重载下标运算符

    Person& operator[](int x)const;

    Person &shuchuxia(int index3);

    Person &shuchuxia1();

    void shuchuxia2();

    void clearVoters();

   

    };

#endif /* PersonSet_hpp */





#include "PersonSet.hpp"


PersonSet::PersonSet()

{

   

    _size=0;

    capacity=4;

    index=0;

    p=new Person* [capacity];

    for (int i=0; i<_size; ++i)

    {

        p[i]=NULL;

    }

    

}

void PersonSet::add(Person& _p)

{

    if (_size>capacity/2)

    {

        Person **temp=p;

        

            this->p=new Person*[this->capacity*2];

            for (int i=0; i<_size; ++i)

            {

                this->p[i]=temp[i];

            }

            capacity*=2;

            for (int i=_size; i<this->capacity; ++i)

            {

                this->p[i]=NULL;

            }

            delete [] temp;

            

        

    }

         p[_size++]=&_p;

}

PersonSet::~PersonSet()

{

    if (p!=NULL)

    {

        delete [] p;

        p=NULL;

    }

}





void  PersonSet::Reset()

{

    this->index=0;

}




Person&PersonSet::NextElement()

{

    return *this->p[index++];

}



int PersonSet::size()//得到实际的个数

{

    return _size;

}



Person& PersonSet::operator[](int x)//重载下标运算符

{

    

    return *(p[x]);

}

Person& PersonSet::operator[](int x)const//重载下标运算符

{

    

    return *(p[x]);

}

Person &PersonSet::shuchuxia(int index3)

{

    

    Person*per= this->p[index3];

    for (int i=index3;i<_size; ++i)

    {

        p[i]=p[i+1];

    }

    

    if (_size<capacity/2)

    {

        Person **temp=p;

        

        this->p=new Person*[this->capacity/2];

        for (int i=0; i<_size; ++i)

        {

            this->p[i]=temp[i];

        }

        capacity/=2;

        for (int i=_size; i<this->capacity; ++i)

        {

            this->p[i]=NULL;

        }

        delete [] temp;

    }

   

    --_size;


    return *per;

}


Person & PersonSet::shuchuxia1()

{

    if (_size<capacity/2)

    {

        Person **temp=p;

        

        this->p=new Person*[this->capacity/2];

        for (int i=0; i<_size; ++i)

        {

            this->p[i]=temp[i];

        }

        capacity/=2;

        for (int i=_size; i<this->capacity; ++i)

        {

            this->p[i]=NULL;

        }

        delete [] temp;

    }

    

  Person *per =p[--_size];

    

    return *per;

}



void PersonSet::shuchuxia2()

{

    int aa=_size;

    for (int i=aa; i>0; --i)

    {

        p[i]=NULL;

        _size--;

    }

}



void PersonSet::clearVoters()

{

    if (_size!=0)

    {

        int a=_size;

        for (int i=0;i<a;++i)

        {

            p[i]=NULL;

        }

        _size=0;

        index=0;

    }

}



猜你喜欢

转载自blog.csdn.net/qq_41939248/article/details/80372928