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

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

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

  1. 带你深入理解STL之Vector容器

    C++内置了数组的类型,在使用数组的时候,必须指定数组的长度,一旦配置了就不能改变了,通常我们的做法是:尽量配置一个大的空间,以免不够用,这样做的缺点是比较浪费空间,预估空间不当会引起很多不便. ST ...

  2. STL之list容器的实现框架

    说明:本文仅供学习交流,转载请标明出处.欢迎转载! list的底层採用数据结构是环形的双向链表. 相对于vector容器.list容器插入和删除操作付出的代价要比vector容器小得多,可是list带 ...

  3. 跟我一起学STL(2)——vector容器详解

    一.引言 在上一个专题中,我们介绍了STL中的六大组件,其中容器组件是大多数人经常使用的,因为STL容器是把运用最广的数据结构实现出来,所以我们写应用程序时运用的比较多.然而容器又可以序列式容器和关联 ...

  4. STL 查找vector容器中的指定对象:find()与find_if()算法

    1 从vector容器中查找指定对象:find()算法 STL的通用算法find()和find_if()可以查找指定对象,参数1,即首iterator指着开始的位置,参数2,即次iterator指着停 ...

  5. STL之vector容器详解

    vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ...

  6. STL笔记(に)--vector容器

    Vector 1.可变长的动态数组 2.需包含头文件#include<vector> (当然,如果用了万能头文件#include<bits/stdc++.h>则可忽略) 3.支 ...

  7. [转]STL之vector容器详解

    vector 容器 vector是C++标准模版库(STL,Standard Template Library)中的部分内容.之所以认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单的说: ...

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

    C++内置的数组支持容器的机制,但是它不支持容器抽象的语义.要解决此问题我们自己实现这样的类.在标准C++中,用容器向量(vector)实现.容器向量也是一个类模板.标准库vector类型使用需要的头 ...

  9. STL中vector容器实现反转(reverse)

    vector容器中实现可以通过以下两种方式实现: #include "stdafx.h" #include <vector> #include <iostream ...

随机推荐

  1. 运输层协议——UDP

    UDP概述: UDP只是做了运输层协议能做的最少工作,仅做了复用/分解,少量的差错检验. UDP是无连接的. UDP优点: 关于何时.发送什么数据的应用层控制更为精细:TCP在拥堵时会遏制发送方的发送 ...

  2. 紫书 习题 10-25 UVa 1575 (有重复元素的全排列+暴搜)

    我一开始以为有什么很牛逼的方法来做,然后一直没有思路 后来看了https://blog.csdn.net/zju2016/article/details/78562932的博客 竟然是暴搜?????? ...

  3. HDU4009 Transfer water 【最小树形图】

    Transfer water Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others) T ...

  4. React Native入门——IDE及其它相关基础技术

    关于React Native的开发,当中一个问题是缺少好用的IDE,有些人说不就是JS么,搞一个记事本也就写了,那样尽管牛逼,但事实上还是非常头大的,有一款好的IDE还是能提升开发效率的,这里对几个还 ...

  5. HTML5吃豆豆游戏开发实战(一)使用Canvas绘制游戏主角

    近期在学习HTML5.爱因斯坦曾说过,"最好的学习就是自己去经历". 于是.我想在学习HTML5的同一时候.做一款简单的小游戏,这样学习起来也会非常有趣的.我想做的是曾经小时候玩儿 ...

  6. 搭建个人博客 方式2 使用jekyll

    孙广东  2016.3.12 环境安装:1.通过 RailsInstaller  来安装 Ruby https://www.ruby-lang.org/zh_cn/documentation/inst ...

  7. Spring Cloud Netflix Eureka client源码分析

    1.client端 EurekaClient提供三个功能: EurekaClient API contracts are:* - provide the ability to get Instance ...

  8. C++的继承和Java继承的比较

    在C++中继承可分为公有继承(public)保护继承(protected)和私有继承(private),而在Java中默认只有一种继承(相当于C++中的公有继承)下面我们来看一段代码 #include ...

  9. Android-Volley网络通信框架(二次封装数据请求和图片请求(包含处理请求队列和图片缓存))

    1.回想 上篇 使用 Volley 的 JsonObjectRequest 和 ImageLoader 写了 电影列表的样例 2.重点 (1)封装Volley 内部 请求 类(请求队列,数据请求,图片 ...

  10. js19--继承终极版本

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/stri ...