首页 > 代码库 > STL之vector容器的实现框架

STL之vector容器的实现框架

说明:本文仅供学习交流,转载请标明出处,欢迎转载!

       实现vector容器的思路等同于实现一个动态数组,下面我们参照源码的相关资料,给出一个vector容器的大致框架,只有声明,没给出具体的实现。

       代码的框架注意从以下几个方面给出:

       (1)空间分配属性,由于是对外封闭的,故为procted;

       (2)共有访问的属性,可供外部用户访问,定义为public;

       (3)容器的构造函数与析构函数;

       (4)vector容器的插入操作;

       (5)vector容器的删除操作;

       (6)vector容器的大小操作;

       (7)vector容器的访问操作。

         具体的大致框架如下所示:

#include<iostream>
#include<cstddef>//用到了size_t和ptrdiff_t
using namespace std;
template<class T,class Alloc=alloc>
class vector
{
	protected:
		typedef simple_alloc<value_type,Alloc>data_allocator;//定义一个空间分配器
		iterator start;//起始地址
		iterator finish;//容器实际大小的末端
		iterator end_of_storage;//容器最大可容大小的末端

		void fill_initialize(size_type n,const T&x);//分配n个元素的大小,初值为x
		void deallocate();//释放整个容器空间
	public:
		/*******公有属性,类型别名************/
		typedef T value_type;//元素类型
		typedef value_type* pointer;//指针类型
		typedef value_type* iterator;//迭代器类型
		typedef const value_type* const_iterator;//指向常量的迭代器类型
		typedef value_type& reference;//引用类型
		typedef size_t size_type;//大小类型
		typedef ptrdiff_t difference_type;//指针差值类型

		/***********构造/析构函数*************/
		vector();//默认构造函数
		explicit vector(size_type n);//单形参构造函数,explicit防止类型的隐式转化
		vector(size_t n,const T & t);//带初值的构造函数
		~vector();//析构函数

		/***********插入操作******************/
		void push_back(const T& t);//后插入值t
		iterator insert(iterator iter,const T& t);//在iter前插入值t
		void insert(iterator iter,size_type n,const T& t);//在iter前插入n个初值为t的元素
		void insert(iterator iter,iterator b,iterator e);//在iter前插入迭代器范围[b,e)的元素

		/***********删除操作******************/
		iterator erase(iterator iter);//删除iter所指向的元素
		iterator erase(iterator b,iterator e);//删除迭代器范围[b,e)所指向的元素
		void clear();//清除容器内所有的元素
		void pop_back();//将容器的最后一个元素弹出

		/***********大小操作******************/
		size_type size()const;//获取实际使用的大小
		size_type max_size()const;//获取编译器可申请的最大大小,以元素的个数为单位
		size_type capacity()const;//获取容器当前的容量
		bool empty()const;//是否为空容器
		void resize(size_type n);//将容器的实际大小调整为n
		void resize(size_type n,const T& t);//将容器的时间大小调整为n,并提供必要的初值t

		/***********访问操作******************/
		iterator begin();//取容器头指针
		iterator end();//取容器最后一个元素的下一个指针
		reference operator[](size_type i);//v[i]
		reference at(size_type i);//取容器的第i个元素,等价于v[i]
		reference front();//返回容器头部元素的值
		refrence back();//返回容器尾部元素的值
};

参考文献:

[1]《C++ primer 第四版》

[2]《STL源码剖析 侯捷》