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源代码剖析 侯捷》

时间: 2024-08-08 01:12:01

STL之vector容器的实现框架的相关文章

STL之list容器的实现框架

说明:本文仅供学习交流,转载请标明出处,欢迎转载! list的底层采用数据结构是环形的双向链表, 相对于vector容器,list容器插入和删除操作付出的代价要比vector容器小得多,但是list带有链表的天生弱点,就是不支持随机访问.从内置的迭代器角度分析,vector容器对应的迭代器为随机访问迭代器,而list容器内置的迭代器则为双向迭代器. 我们也知道,STL中提供的很多算法都是基于随机访问迭代器的,如sort(b,e)函数,其所使用的迭代器就是随机访问迭代器,所以,list不能使用这类

STL之deque容器的实现框架

说明:本文仅供学习交流,转载请标明出处,欢迎转载! vector底层采用的是一个数组来实现,list底层采用的是一个环形的双向链表实现,而deque则采用的是两者相结合,所谓结合,并不是两种数据结构的结合,而是某些性能上的结合.我们知道,vector支持随机访问,而list支持常量时间的删除,deque支持的是随机访问以及首尾元素的删除. deque是double ended queue的缩写,读作deck.首先我们用一个图来说明deque底层所采用的数据结构. 这个数据结构有一种似曾相识的感觉

带你深入理解STL之Vector容器

C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. STL实现了一个Vector容器,该容器就是来改善数组的缺点.vector是一个动态空间,随着元素的加入,它的内部机制会自行扩充以容纳新元素.因此,vector的运用对于内存的合理利用与运用的灵活性有很大的帮助,再也不必因为害怕空间不足而一开始就配置一个大容量数组了,vector是用多少就分配多少. 要

【C++】STL,vector容器操作

C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头文件:#include <vector>.vector 是一个类模板.不是一种数据类型,vector<int>是一种数据类型.Vector的存储空间是连续的,list不是连续存储的. 一. 定义和初始化vector< typeName > v1;       //默认v1为

C++STL之vector容器

初学STL,以下内容且当自己积累用,日后再慢慢完善. 向量容器(vector)是一种顺序容器,是一块连续分配的内存,支持随机访问,从数据安排的角度看,和数组极其相似. 数组跟vector的区别在于:数组是静态分配空间,一旦分配了空间的大小,就不可以再改变了,例如,int a[6];而vector是动态分配内存,随着元素的不断插入,它会按照自身的一套机制不断扩充自身的容量,vector容器的容量增长是按照容器现在容量的一倍进行增长. 至于迭代器,它类似一个指向vector中元素的指针. -----

C++STL中vector容器 begin()与end()函数、front()与back()的用法

一.begin函数 函数原型: iterator begin(); const_iterator begin(); 功能: 返回一个当前vector容器中起始元素的迭代器.   二.end函数 函数原型: iterator end(); const_iterator end(); 功能: 返回一个当前vector容器中末尾元素的迭代器.   三.front函数 函数原型: reference front(); const_reference front(); 功能: 返回当前vector容器中起

C++ STL vector容器学习

STL(Standard Template Library)标准模板库是C++最重要的组成部分,它提供了一组表示容器.迭代器.函数对象和算法的模板.其中容器是存储类型相同的数据的结构(如vector,list, deque, set, map等),算法完成特定任务,迭代器用来遍历容器对象,扮演容器和算法之间的胶合剂. 模板类vector 在计算中,矢量(vector)对应数组,它的数据安排以及操作方式,与array非常类似.在C++中,使用vector模板类时,需要头文件包含#include<v

STL学习二:Vector容器

1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添加或移除元素非常快速.但是在中部或头部插入元素或移除元素比较费时. 2.vector对象的默认构造 vector采用模板类实现,vector对象的默认构造形式 vector<T> vecT; vector<int> vecInt;          //一个存放int的vector容器

STL之vector,数组线性容器array,list容器,算法find,find_if,bind1st,仿函数

 1.STL(Standard Template Library,是用泛型技术来设计完成的实例)的概念与组成 Iterator(迭代器) Container(容器) Algorithm(算法) Adaptors(配接器) STL的六大组件分别是: 容器(Container) 算法(Algorithm) 迭代器(Iterator) 仿函数(Function object) 适配器(Adapter) 空间配置器(allocator):只能分配内存等 2.容器与算法 案例如下: #include<