实现Vector的代码....

上善若水邻 2011-02-19 09:25:51
4)请编写一个类似vector向量的数据结构。要求实现msdn上面一下成员函数:
Assign/at/back/begin/capacity/clear/empty/end/erase/front/insert/max_size/pop_back/push_back/rbegin/rend/resize/reserve/size/swap

这是我在笔试时遇到的,我没有全部实现,而且我还抄了STL源码剖析中的代码..
现在我想全部实现它,但是空间配置器很麻烦,STL源码剖析书中的代码我抄过来后,发现在VS中报错,
以前看到有人说他实现过一个,但是现在找不到了,谁提供一下?谢谢!
[code=C]
#include"head.h"
namespace MyVector
{
template<typename T>
class Vector
{
public:
// vector 的嵌套类型定义
typedef T value_type;
typedef value_type* pointer;
typedef value_type* iterator;
typedef value_type *const const_iterator;
typedef value_type& reference;
typedef size_t size_type;
typedef ptrdiff_t difference_type;
protected:
size_type length; //表示目前已用空间大小。
iterator start; //表示目前使用空间的头
iterator finish; //表示目前使用空间的尾
iterator end_of_storage; //表示目前可用空间的尾
public:
//Vector():size(0),start(0),finish(0),end_of_storage(0){}
Vector(const_iterator Beg, const_iterator End)
{
//不考虑超级大的数组。
length = End - Beg;
start = new value_type[length*2+1]();
end_of_storage = start+length*2;

for(size_type i=0; i<length ;i++)
{
start[i] = Beg[i];
}
finish = start+length;
}
~Vector(){ clear(); }
private: //不想写了,所以禁止了复制和赋值。
Vector(const Vector&);
Vector& operator =(const Vector&);
public:
void clear()
{
if(start)
{
delete []start;
start = NULL;
finish = NULL;
end_of_storage =NULL;
}
}
iterator begin() const { return start; }
iterator end() const { return finish; }
reference front() const { return *begin(); }
reference back() const { return *(end()-1);}
size_type size() const {return size_type(end()-begin());}
size_type capacity() const
{
return size_type(end_of_storage - begin());
}
bool empty() const {return begin() == end();}
reference operator [](size_type n)
{
if(n>length)
return back();
else
return *(begin() + n);
}
reference at(size_type i)const
{
if(i>length)
throw "error";
return *(begin()+i);
}
void push_back(const T &rt)
{
if(finish != end_of_storage)
{
*finish = rt;
++finish;
++length;
}
else
{
iterator temp = new value_type[length*2]();
for(size_type i=0; i<length; i++)
{
temp[i] = start[i];
}
delete []start;
start = temp;
start[length] =rt;
++length;
finish = start+length;
end_of_storage = start+length*2;

}


}
void pop_back()
{
--finish;
--length;
}

};
}
[/code]
呵呵...不知道我上一贴为什么被锁定?
...全文
189 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
a707000646 2011-02-19
  • 打赏
  • 举报
回复
楼上的犀利哥
马上就解决了

64,685

社区成员

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

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