2019独角兽企业重金招聘Python工程师标准>>>

序列式容器

容器,置物之所也。

按“数据在容器中排列的特性”,可以将基本的额数据结构类型划分为序列式与关联式。本文就序列式容器进行杂谈。

一、vector

我接触STL,就是从vector开始的,一开始写project只是拿来主义,当时只是知道它可以自动生长空间,(好像知道就这可以了^-^)。但是读完相关书籍后,对vector又有了新的认识,至少对它的构造以及管理更加清晰。

  • 采用半开区间[  )

当然,对于STL的所有容器都是这样。这样方便编程。(深深的体会到细节的美丽,与平时我们所用的“哨兵”异曲同工)

  • vector维护的是绝对的连续线性内存空间

两个相邻迭代器之间的距离是一个常数。(如同线性空间内指针一样)。

基于vector的适配器heap有些实现细节也得益于其绝对的连续线性内存空间。

  • vector数据结构

template <class T, class Alloc = alloc>//使用标准的空间配置

class vector{

/*other*/

……

protected:

iterator start;           //vector空间头

iterator finish;          //目前正在使用的空间尾

iterator end_of_storage;  //可用的空间尾

}

假设有vector<int> myVec,已经存储了数据2,4,5。下面看看数据结构内部是什么样的。

看完上图,我相信你已经对vector内部的数据结构有了很深的理解,还有size与capacity是两个不同的概念,判断一个vector是否为空只能用size的原因也就不言而喻。

  • vector构造与内存管理

  • 配置两倍的请求内存量

  • 进行空间生长时,若原剩余空间量足够容纳再次请求大小,就一次性将数据压入,否则,进行两倍原大小的空间配置,如果此时在生长方向没有连续的可用内存,则会引起空间重新配置。进行移动数据,释放原空间等一系列操作,注意,此时指向原vector的迭代器全部失效,因为此时的空间已经搬新家了

  • 释放元素时,回收内存,当然不返回给OS,留给自己用。直至生命周期结束。

  • vector常用操作以及注意事项

push_back:在finish后压入一个元素

pop_back:拿掉尾端元素

erase:清除指定元素

clear:清空vector空间所有元素,此时size()=0,而capacity()!=0

二、list

n  list相对于vector就显得节俭多了,对空间的运用绝对的精确,可谓一点也不浪费啊。

n  list每配置一个元素或删除一个元素,就会进行空间配置或释放(还给OS了)

n  list数据结构

list被设计为双链表结构(故list提供了双向迭代器,具备前移、后移的能力)。节点结构如下:

template<class T>

struct __list_node{

typedef void* void_pointer;

void_pointer prev;   /*双链表的前后指针*/

void_pointer next;

T data;              //数据

};

  • list构造与内存管理

再次强调:是绝对的精确,绝对的配置与释放元素所占用的空间。

  • list常用操作以及注意事项

操作与双链表的操作类似。

push_front,pop_front:头插与头删除

push_back,pop_back:尾插与尾删除

unique:移除数值相同的连续元素。举个列子:假设现在list中的元素为2,3,4,5,5,5,6,7,7,8,9。经过unique操作后,list元素为:2,3,4,5,6,7,8,9

merge:归并排序

splice:接合操作,可以是同一个list内部,也可以是不同list之间。

sort:排序(注意此处使用的不是STL的sort()算法)

clear:清空整个list

三、deque

n  deque是一种双向开口的连续线性空间(注意是:伪连续,而是分段线性

n  对于deque,要理解它的中控器,有如下示意图:

中间的每一个迭代器(除去头和尾)都通过first和last将每一段线性空间给串起来,像串珠子一样,而中控器相当于管理者,他掌握者每一个“珠子”的位置以及使用情况。

了解了STL的序列容器,那么对后面的适配器stack、queue、heap、priority_queue都会很轻松的掌握。

                    少年,黑暗中继续前行!!

转载于:https://my.oschina.net/stone8oy/blog/284250

STL札记2(序列容器vector、list、deque)相关推荐

  1. 【STL四】序列容器——vector容器

    [STL容器]序列容器--vector容器 一.简介 二.头文件 三.模板类 四.成员函数 1.迭代器 2.元素访问 3.容量 4.修改操作 五.demo 1.容量reserve.capacity.s ...

  2. C++线性序列容器vector简单总结

    C++线性序列容器<vector>简单总结 vector是一个长度可变的数组,使用的时候无须声明上限,随着元素的增加,Vector的长度会自动增加:Vector类提供额外的方法来增加.删除 ...

  3. 简单实现STL库中的容器vector

    一.简要说明 本篇博客实现的容器仅仅可存放任意基本数据类型的元素,但是还没有实现容器可存放容器类型的元素(类似于多维数组). 二.代码实现 2.1 数组声明 #define INCREASEMENT ...

  4. 【C++ STL学习笔记】C++ STL序列式容器(array,vector,deque,list)

    文章目录 C++ STL容器是什么? 迭代器是什么,C++ STL迭代器(iterator)用法详解 迭代器类别 迭代器的定义方式 C++序列式容器(STL序列式容器)是什么 容器中常见的函数成员 C ...

  5. java中vector容器,vector向量容器(常用的使用方法总结)

    关于STL中vector容器的学习,编译运行后边看代码,边看执行结果效果更佳,还是想说看别人的代码一百遍,不如自己动手写一遍. vector向量容器不但能像数组一样对元素进行随机访问,还能随时在尾部插 ...

  6. C++ STL容器——序列式容器(array、vector、deque、list)

    概述 1.C++ STL的容器分为三种,序列式容器,关联式容器,无序式容器,这里先说说常用的序列式容器. 2.array,vector,deque,list,forward_list这几种都是序列式容 ...

  7. 【C++ STL学习之三】容器deque深入学习

    C++ STL容器deque和vector很类似,也是采用动态数组来管理元素. 使用deque之前需包含头文件: #include <deque> 它是定义在命名空间std内的一个clas ...

  8. 容器大小_C++复习篇(7)序列式容器vector

    点击蓝字 关注我们 主要内容 本篇内容主要介绍STL六大组件之一的序列式容器(vector),容器其实就是各种数据结构:另外,迭代器部分的内容可以看看<STL源码剖析>,它的的主要作用是作 ...

  9. C++ STL常用标准库容器入门(vector,map,set,string,list...)

    STL常用标准库容器 C++ STL中最基本以及最常用的类或容器无非就是以下几个: 目录 string vector deque list forward_list queue priority_qu ...

最新文章

  1. 事务的应用demo1-------采用JDBC硬编码方式模拟银行转账。
  2. BGP小实验——选路不困难,只要有方法
  3. 解决《Mobile绘制背景图片》中的问题
  4. POJ 1797 Heavy Transportation
  5. 第一个程序03 - 零基础入门学习汇编语言22
  6. 【数据结构】——构建二叉树,遍历二叉树
  7. java resultset 映射到实例_Java中,将ResultSet映射为对象和队列及其他辅助函数
  8. Groovy 入门教程
  9. IEC60958/61937协议
  10. Google Earth Engine(GEE)——逐日MOD10A1.005积雪覆盖度500m数据下载和均值标准差统计(中国区域为例)
  11. 拳皇97用什么计算机语言编写,拳皇97这几个人物非常适合新手,用来打电脑可轻松通关...
  12. 滴滴裁员2000人:老板辞退你,从来都不是因为钱
  13. python中and、or、not、in和not in五种运算用法
  14. 用Excel求线性回归方程
  15. 计算机word表格计算教程F9,Word表格数据计算与域操作
  16. 高中教师资格证笔试计算机学科知识与能力,2018下半年教师资格证考试笔试-高中信息技术学科知识与能力试题答案...
  17. linux进阶之道 pdf,PDF
  18. oracle下载,windows版本的oracle数据库下载
  19. Vue项目中background-image属性设置方法
  20. hg和git命令对照表(值得拥有)

热门文章

  1. VS2010 php 插件配置
  2. 关于SQL数据库中的数据到如何导出--SQL2000导入到SQL2008中
  3. 大数据之-Hadoop3.x_MapReduce_Combiner概述---大数据之hadoop3.x工作笔记0118
  4. C++_基础部分_C++文件操作_文件的写入操作---C++语言工作笔记076
  5. AndroidStudio_android中实现图片动态设置图片的位置以及图片动态缩放---Android原生开发工作笔记234
  6. VC++工作笔记0002---积累-VC++中的L“”是什么意思
  7. STM32工作笔记0093---DAC数模转换实验-M3
  8. override(C# 参考)
  9. java 中生成文档_在Java中生成专业的公文文档
  10. mysql分句执行_《Mysql 一条 SQL 语句是如何执行的?》