实现Vector的代码....
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]
呵呵...不知道我上一贴为什么被锁定?
相关推荐
c++ vector模拟实现代码
vector是C++ STL中一个非常重要的容器,了解 vector 的底层实现原理,可以很好的帮助我们更加熟练的使用vector。这篇文章通过实例代码给大家介绍c++ vector模拟实现,感兴趣的朋友跟随小编一起看看吧
vector类 代码实现
使用C++语言实现标准库容器vector类代码,虽然与标准库源码有点出入,但功能已经大部分实现。
Vector实现代码
利用C++模板完成容器Vector类的简单功能实现,如迭代器等
vector模拟实现痛点解析[代码]
本文详细解析了在模拟实现C++ vector容器过程中遇到的四大核心痛点,包括reserve实现中的空间管理问题、打印模板的编译错误、迭代器失效的两种典型场景(扩容导致的野指针和无扩容时的位置偏移),以及memcpy浅拷贝引发的string数据异常。文章通过具体代码示例演示了各类问题的产生原因,并提供了解决方案:使用相对位置计算解决扩容迭代器失效、typename声明模板类型、深拷贝替代memcpy等。同时深入探讨了模板嵌套设计在容器初始化中的应用价值,以及erase操作中迭代器失效的隐蔽风险。最后总结了vector底层实现原理对实际开发的重要指导意义,帮助开发者深入理解STL容器设计思想。
C++ vector类模拟实现[项目代码]
本文详细介绍了如何从零开始模拟实现C++ STL中的vector类,包括其核心功能如增删改查操作的实现。内容涵盖了构造函数、析构函数、拷贝构造、运算符重载等基本成员函数,以及元素访问、容量管理和修改器等重要接口的实现细节。特别强调了迭代器失效问题及其解决方案,通过代码示例和图例解析,帮助读者深入理解vector类的内部机制和实现原理。文章还提供了完整的模拟实现代码,适合有一定C++基础的读者学习和巩固相关知识。


