STL vector实现(一)
来源:互联网 发布:线上交易平台数据安全 编辑:程序博客网 时间:2024/06/05 04:34
作者放弃对本文的任何权利。任何人都有权转载,修改,分发。转载请注明出处。作者对本文不承担任何责任。
假定你现在已经能熟练使用vector,如果你很好奇vector背后是怎么实现的,那么本文或许对你能有所帮助。
vector代表了c++的动态数组,大小是动态可增长的。你不必考虑自己手动分配或释放内存,也不必担心内存泄漏,vector帮你做了这一切。vector的使用很简单,但是要做到有效率,没那么容易,了解他背后的实现原理能帮助达到这一目的。
言归正传。本文基于SGI STL的一个vector的实现,向大家讲述vector的实现思想和技术,如有不妥的地方,还请大家给出批评建议。(建议大家在阅读本文之前,先能温习一下vector的相关内容和用法)。
让我们先看看类的声明和数据成员:
#include <alloc.h> //内存分配器头文件,非标准
#include <iterator.h> //迭代器头文件,非标准
template <class T > //模板类声明,提供泛型功能。
class vector {
typedef alloc Alloc; //内存分配器typedef
public:
typedef T value_type; //值类型 T
typedef value_type* pointer; // 指针类型 T*
typedef value_type* iterator; //迭代器,这里的迭代器不需要封装,只是一个原生指针的typedef
typedef const value_type* const_iterator; // 只读迭代器
typedef value_type& reference; //引用 T&
typedef const value_type& const_reference; //只读引用
typedef size_t size_type; //长度类型 size_t,一般是unsigned int;
typedef ptrdiff_t difference_type; // 指针间隔,用来表示两个指针间的距离
typedef reverse_iterator<const_iterator, value_type, const_reference,
difference_type> const_reverse_iterator; //反向迭代器,定义在<iterator.h>
typedef reverse_iterator<iterator, value_type, reference, difference_type>
reverse_iterator; //只读反向迭代器
protected:
//数据成员
typedef simple_alloc<value_type, Alloc> data_allocator; //分配器的typedef
iterator start; //vector的第一个元素的迭代器,用来表示vector,永远为vector.begin();
iterator finish; //vector的末尾,指向vector的最后一个元素的下一个位置。永远为vector.end();
iterator end_of_storage; //vector所拥有的内存的末尾。如果等于vector.end(),表示vector已满
}
从以上我们可以看到,vector用allocator来进行内存管理,用三个迭代器来引用这段内存。vector的iterator 其实就是T*的别名。我们知道在一个连续的内存里(数组),指针是可以做算术运算的,也支持[]操作,所以vector的iterator也支持算术运算,++,--,+=, -=,[],vector的迭代器就是通常的随机访问迭代器了。
另外,我想说的是,STL有许多流行的版本,每一个版本实现都不是相同的,但是原理区别不大。vector的底层实现一般是连续的内存(数组)。deque的实现是连续的内存块,list的是双链表,set和map是红黑树。stack和queue都是这些容器的适配器(用这些容器来实现)。知道这些是很有必要的。
下一篇文章里,将会讨论到vector的常用接口的实现。
- STL vector实现(一)
- STL(一) vector
- STL vector 容器实现
- STL vector实现
- 自己实现 STL vector
- STL vector实现
- stl--vector 操作实现
- STL-vector的实现
- 【STL】 vector 模拟实现
- <STL>模拟实现Vector
- 【STL】模拟实现vector
- 模拟实现STL-Vector
- c++ stl vector实现
- STL vector实现机制
- STL模拟实现vector
- STL源码剖析(一)-vector
- C++ STL 学习一vector
- C++ STL vector实现(二)
- (转)为提高实时性能,设计和优化 Microsoft Windows CE .NET(下)
- 随笔
- CSS入门教程
- winform 處理網頁
- 基于容器的用户安全管理系统
- STL vector实现(一)
- ASP.NET自定义控件组件开发 第四章 组合控件开发CompositeControl 后篇 --事件冒泡
- 数字证书操作
- gcc优化分析
- JDK1.5官方下载_JDK5官方下载_JDK1.5API(chm)下载_JDK5APICHM中文参考下载_JDK1.5下载_JDK5下载
- HTML link标签
- ASP.NET自定义控件组件开发 第五章 模板控件开发
- 由递归所想到的:如何将字符串或者数字转换成大写货币的问题
- CSS 样式相关