刚做了一个动态的C++数组 初学 感觉很多不足 求意见...

t195295108 2010-07-13 10:49:21
刚做了一个动态的C++数组 初学
感觉很多不足
求意见...

#include <iostream>
using namespace std;

template<class T>
class myvector
{
public:
myvector():size(0),capa(0)
{
arrs=0;
}
~myvector()
{
delete []arrs;
}
void plus_back(T obj)
{
cout<<"形参"<<&obj<<endl;
if(size==capa)//如果满了
{
if(size==0)
capa=1;
else
capa*=2;
changesize();
}

arrs[size++]=obj;

}
void pop_back()
{
cout<<"删除"<<endl;
if(size)//如果不为0
{
--size;//删除
if(!size)//如果为0
{
capa=0;
delete []arrs;
arrs=0;//空引用
}
else if(size==capa/2)
{
capa/=2;
changesize();
}


}
}
void display()
{
for (int i=0;i!=size;++i)
{
cout<<arrs[i]<<endl;
}
}

private:
T *arrs;
int size;//leng
int capa;//size
void changesize()//改变大小
{
T *temparr=new T[capa];
for (int i=0;i!=size;i++)
{
temparr[i]=arrs[i];
}
delete []arrs;
arrs=temparr;
}

};
class User
{
public:
User(int i=5):id(i)
{
cout<<"user :"<<this<<"初始化"<<endl;
}
~User()
{
cout<<"user :"<<this<<"销毁了"<<endl;
}
private:
int id;
friend ostream& operator<<(ostream& os,const User& us)
{
os<<"打印: userID: "<<&us;
return os;
}
};
int main()
{
myvector<User> vec;

vec.plus_back(User());
vec.plus_back(User());
vec.display();
vec.pop_back();
//vec.plus_back(User());
vec.display();
}
...全文
60 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
ztenv 版主 2010-07-13
  • 打赏
  • 举报
回复
不能算做数组,只能算作栈而已;
richbirdandy 2010-07-13
  • 打赏
  • 举报
回复
参考下sgi stl的vector代码嘛
jeremyhuang81 2010-07-13
  • 打赏
  • 举报
回复
我想如果你添加迭代器的话,可能更好,既然是vector,没有迭代器iterator那就不全面了

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧