vector的实现
来源:互联网 发布:淘宝主图去同款 编辑:程序博客网 时间:2024/05/18 00:54
有了前面的基础后,我们知道对于特定的容器,我们一般要有对应的iterator与之对应,因为不同的容器,对应不同的数据结构,不同的数据结构对应不同的存取方式,所以也对应了不同的iterator类型。
我们知道vector容器对应的iterator肯定是 std::random_access_iterator_tag 类型的,它代表这种迭代器可以随机访问。
所以跟前面一样我们的迭代器首先应该实现 相应类型接口:
public:
typedef typename T value_type;
typedef typename ptrdiff_t difference_type;
typedef typename T& reference;
typedef typename T* pointer;
typedef typename std::random_access_iterator_tag iterator_category;
然后就是重载一些操作符了,尽量让它的操作与指针的操作相符合,所以我们必须首先一下操作符的重载:
++(前),++(后)
--(前),--(后)
+(int n) -(int n)
-(iterator iter)
* ->
所以有了这些要求后我们的迭代器就可以按如下实现了:
然后就是vector的实现了:
首先我们要确认它提供哪些接口,一般来说,对于线性存储的,对应有:
push_back,pop_back,front,back,at,operator[],empty,size。这些基本的操作,插入,删除,随机访问,清空,得到元素的数量。
但是我们还有一点要记住,因为vector跟array不一样,vector可以实现智能增长,所以我们一般需要下面3个成员来记录vector的状态:
iterator start;//指向第一个元素
iterator finish;//指向最后一个元素的后一个元素
iterator end_of_storage;//指向容器的末尾。
当finish==end_of_storage时候就代表空间满了,需要重新分配一个更大的空间.
所以这个时候必须还要提供一个 私有的函数用于分配空间。
在这里仿照书上写的,我用insert_aux()这个函数全权完成了。在这个函数里面实现内存的分配和释放:
new_start=(T*)__my_default_alloc_template<0,0>::allocate(sizeof(T)*capacity);//分配内存
__my_default_alloc_template<0,0>::deallocate(start,(end_of_storage-start)*sizeof(T));//释放内存
完整代码如下:
- vector的实现
- vector的实现
- Vector的C++实现
- 我的vector实现
- 向量vector的实现
- vector类的实现
- 简单vector 的实现
- vector的内部实现
- Vector的简单实现
- 向量Vector的实现
- vector容器的实现
- 简单的vector实现
- Vector类的实现
- 向量vector的实现
- vector方法的实现
- vector的简单实现
- STL-vector的实现
- template vector 的实现
- webmin 安装及使用问题
- Linux logo和屏幕光标
- Android APN设定与上网处理
- [zt] 深入理解HashMap
- The workspace exited with unsaved changes in the previous session; refreshing workspace to recover changes
- vector的实现
- Android display架构分析
- linux遇到的问题
- dom4j
- python输入中文
- 利用HTTP-only Cookie缓解XSS之痛
- clistctrl 虚拟列表
- 控制模型
- 什么是跨站攻击