vector源码学习1(未完)
来源:互联网 发布:软件架构设计 pdf 编辑:程序博客网 时间:2024/06/18 13:14
vector:一个存有多个相同对象的集合。
vector和C中的数组的区别在于,vector都是动态的,他的大小可以增加。
vector就是一个类,要实现一个类,就先看看它需要具有什么功能。
1.定义和初始化(vector<> a())
2.添加元素(push_back)
3.其他:empty(),size(),a[n],a1 = a2,
//vector 的源代码摘录 template <class T , class Alloc = alloc> //默认使用alloc空间适配器class vector{public: //类别定义 typedef T value_type; typedef value_type * pointer; typedef value_type * iterator;//vector的迭代器就是原生指针 typedef value_type & reference; typedef size_t size_type; typedef ptrdiff_t differnence_type;protected: typedef simple_alloc<value_type, Alloc> data_allocator; iterator start;//指向第一个元素的指针 iterator finish;//指向最后一个元素的指针 iterator end_of_storage;//指向空间的最后一个单元 void insert_aux(iterator position , const T& x);//插入元素的函数 void dellocate()//调用前面空间适配器中的deallocate函数用来释放空间。 { if(start) data_allocator::deallocate(start,end_of_storage - start); } void fill_initialize(size_type n , const T& value)//构造函数的实际操作 { start = allocate_and_fill(n,value); //申请空间并填入元素 finish = start + n; end_of_storage = finish; }public: iterator begin () { return start; } iterator end() { return finish; } size_type size () { 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)//重载[]运算符 { return *( begin() + n ); } vector ()//默认构造 { start = 0; finish = 0; end_of_storage = 0; } vector (size_type n , const T& value) { fill_initialize(n , value); } vector (int n , const T& value) { fill_initialize(n , value); } vector(long n , const T& value) { fill_initialize(n , value); } explict vector (size_type n) { fill_initialize(n , T() ); } ~vector() { destory(start , finish);//先析构对象 deallocate();//后释放内存 } reference front () { return *begin(); } reference back () { return *finish(); } void push_back (const T& x) { if (finish != end_of_storage ) { construct (finish , x); ++finish; } else insert_aux(end() , x); } void pop_back() { --finish; destroy(finish); } iterator erase (iterator position) { if ( position + 1 != end()) { copy(position + 1 , finish , position) } --finish; destroy(finish); return position; } void resize (size_type new_size , const T& x) { if (new_size < size() ) { erase(begin() + new_size , end() ); } else { insert ( end() , new_size - size() , x); } } void resize(size_type new_size) { return (new_size, T()); } void clear() { erase( begin(), end()); }protected: iterator allocate_and_fill(size_type n ,const T& x)//申请空间和填入元素的实际操作 { iterator result = data_allocator::allocate(n); uninitialized_fill_n( result , n , x); return result; }};
0 0
- vector源码学习1(未完)
- 源码学习之Vector
- Vector源码学习
- OSChina1.7.4源码学习笔记(未完)
- C++ vector总结----未完
- STL源码学习(vector篇)
- STL::vector的源码学习
- 集合源码学习(四):Vector
- spring源码学习1 未完待续 欢迎评论与指教 开始有点乱 后期整理
- orcal学习(1)未完待续
- [Java]JDK源码学习(1)ArrayList和Vector
- 深度学习(八)caffe源码学习-未完待续
- 深度学习(八)caffe源码学习-未完待续
- SGI STL V3.2 源码剖析笔记-3. vector(未完待续)
- SGI STL V3.2 源码剖析笔记-3. vector(未完待续)
- 自定义vector容器【未完待续】
- BCB的VECTOR源码(参考学习)
- 标准模板库 vector源码学习
- 第十二周第四天
- 虚幻引擎4中的移动设备分析插件
- Scala学习笔记22【继续学习Scala List的使用】
- BLE 学习记录
- Nginx基础. HTTP多阶段处理大致分析
- vector源码学习1(未完)
- Linux入门到精通 l基本命令
- Android开发之常用代码片段
- Android EditText带清空按钮&动画
- Lua文件加密
- jre7精简
- [Java Web]Web应用基本概念
- Android获取安装的应用程序
- linux命令-mkdir