c++实现vector类,并有一个排序和一个查找的泛型算法

本文介绍了一个自定义的CVector容器类的设计与实现过程,该容器支持动态扩容,并提供了迭代器支持以及基本的数据操作功能,如排序和查找。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<iostream>
#include<cstring>


using namespace std;


template<typename T>
//***********容器类***************
class CVector
{
public:
CVector(int size=10):mpVec(NULL),msize(size),mcur(0)
{
mpVec = new T[msize];
}
~CVector()
{
delete []mpVec;
}
T& operator[](int index)    //重载[]运算符
{
return mpVec[index];
}
const T& operator[](int index)const //const this
{
return mpVec[index];
}
bool IsFull()           
{
return msize == mcur;
}
bool IsEmpty()
{
return mcur == 0;
}
int Length()const        //返回当前容器中数据的长度(个数)     
{
return mcur;
}
void Resize()            //给当前容器重新开辟大小为原来的2倍
{
if(IsFull())
{
T* tmp = new T[2*msize];
memcpy(tmp,mpVec,sizeof(T)*msize);
msize*=2;
delete []mpVec;
mpVec = tmp;
}
}
void PopVec()           
{
if(IsEmpty())
{
return ;
}
mcur--;
}
void PushVec(const T &value)
{
if(IsFull())
{
Resize();
}
mpVec[mcur++] = value;
}
//************容器的迭代器*************
class Iterator
{
public:
typedef T value_type;
Iterator(T *mpVec):iter(mpVec){
}

Iterator(const Iterator &src)
{
iter = src.iter;
}
void operator++()
{
++iter;
}
bool operator!=(const Iterator &src)
{
return iter != src.iter;
}
bool operator==(const Iterator &src)
{
return iter == src.iter;
}
T& operator*()
{
return *iter;
}
bool operator<(const Iterator &src)
{
return iter < src.iter;
}
int operator-(const Iterator &src)
{
return iter-src.iter;
}
Iterator operator-(int length)
{
return Iterator(iter-length);
}
Iterator operator+(int length)
{
return Iterator(iter+length);
}
private:
T *iter;
};


Iterator begin()
{
return Iterator(mpVec);
}
Iterator end()
{
return Iterator(mpVec+mcur);
}


private:
T *mpVec;     //容器中数据的类型指针   
int msize;    //容器所能包含的数据个数
int mcur;     //当前容器中数据的个数


CVector(const CVector<T>&);
CVector<T>& operator=(const CVector<T>&);
};


template<typename Iterator>
//****************通过迭代器给容器中的数据排序**************
void Mysort(Iterator first,Iterator last)
{
Iterator i = first;
Iterator j = first;
int k = 0;

Iterator::value_type tmp;
for(;i<last-1;++k,++i)
{
for(j=first;j<last-1-k;++j)
{
if(*j > *(j+1))
{
tmp = *j;
*j = *(j+1);
*(j+1) = tmp;
}
}
}
}


template<typename Iterator,typename T>
//******************查找容器中和value值相等的下标**************
Iterator MFind(Iterator first,Iterator last,const T &value)
{
Iterator i = first;
for(;i != last;++i)
{
if(value == *i)
{
cout<<"could find"<<endl;
return i;
}
}


cout<<"can not find"<<endl;
return last;
}


int main()
{
CVector<int> A(20);
for(int i=0;i<20;i++)
{
A.PushVec(rand()%100+1);
}


int size = A.Length();
for(int j=0;j<20;j++)
{
cout<<A[j]<<" ";
}
cout<<endl;

MFind(A.begin(),A.end(),2);
//Mysort(A.begin(),A.end());


//CVector<int>::Iterator tmp = A.begin();
//for(;tmp != A.end();++tmp)
//{
// cout<<*tmp<<" ";
//}


return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值