之前一篇博文(《初窥标准库》)简单了解了一种最常用的顺序容器:vector类型。本文将对该文内容进行进一步的学习和完善,继续讨论标准库提供的顺序容器类型。所谓顺序容器,即将单一类型的元素聚集起来成为容器,并根据位置来存储和访问这些元素。标准库定义了三种顺序容器类型:vector,list和deque(double-ended queue双端队列)。同时还提供了三种顺序容器适配器(adaptor):stack,queue,priority_queue。

顺序容器 vector 支持快速随机访存
list 支持快速插入/删除
deque 双端队列
顺序容器适配器 stack 后进先出栈
queue 先进先出队列
priority_queue 有优先管理的队列

顺序容器的定义及迭代器

  • 容器元素类型必须满足两个条件:元素支持赋值运算,元素对象可以复制。以上为容器要满足的最低限度,关联容器则需要满足其他元素。注意到,引用不支持赋值运算,IO库类型不支持赋值或复制,故两者都不能作为容器的元素。
  • 注意:容器定义时,必须用空格隔开两个相邻的>符号,否则系统会将>>当作右移操作符,导致编译错误。
1 vector< vector<string> > liens; //ok
2 vector < vector<string>> lines; //error:>>treated as shift operator

  • 标准库为迭代器提供一些常用的运算,如解引用,自增自减等。
  • 关系操作符只适用于vector和deque容器,因为它们提供快速随机访存,可以根据元素位置直接访问容器元素。而list容器的迭代器既不支持算术运算,也不支持关系运算。
  • 迭代器范围为左闭合区间,即[first,last),表示从first所指示的位置到last所指示的位置之前的所有元素。对迭代器的要求为:它们指向同一个容器中的元素或超出末端的下一位置;first反复做自增运算能够到达last。
  • 某些容器操作会修改容器的内在状态或移动容器内的元素,这样将会使部分迭代器失效,进而导致与悬垂指针同样的问题。考虑如下两段代码,有何不同?为何?
     1 vector<int>::iterator mid = iv.begin() + iv.size()/2;
     2 vecor<int>::iterator iter = iv.begin();
     3 while (iter != mid)
     4     if (*iter == someVal)
     5         iv.insert(iter, 2*someVal);
     6
     7 vector<int>::iterator iter = iv.begin();
     8 while (iter != iv.begin() + iv.size()/2)
     9 {
    10     if (*iter == someVal)
    11     {
    12           iter = iv.insert(iter, 2*someVal);
    13           iter += 2;
    14     }
    15     else
    16         ++iter;
    17 }

顺序容器的操作

  • 一些基本的操作,如begin和end成员,insert操作,resize操作,erase操作,assign操作,关系操作符等。

vector容器的自增长

  • vector类提供了两个成员函数:capacity和reserve,前者获取在容器需要分配更多的存储空间之前能够存储的元素总数,后者则告诉容器应该预留多少空间。注意,capacity不等于size。

容器的选用

  • 若要随机访存元素,应使用vector或deque。
  • 若要在容器的中间位置插入或删除元素,应使用list。
  • 若是在首尾部分插入或删除,使用deque。
  • 如果只需要在读取输入时在容器的中间位置插入元素,然后需要随即访问元素,则可将元素读入list容器,接着对此容器重新排序,使之适合顺序访问,在复制到vector中。
  • 选择容器的核心取决于:随机访存list的代价与在vector/deque中插入删除时复制元素的代价。

转载于:https://www.cnblogs.com/huashu/p/4269430.html

C++拾遗(四)——顺序容器相关推荐

  1. 获取顺序容器vector,deque,string和array的首尾元素的方法有四个

    获取顺序容器vector,deque,string和array的首尾元素的方法有四个: (1)迭代器 (2)下标 (3)front() 和 back()成员函数 (4)at()成员函数 如下所示,得到 ...

  2. C++知识点17——使用C++标准库(顺序容器vector常用操作)

    C++STL中的容器类型分为两种,一种是顺序容器,另一种是关联容器,这两种容器之所以被划分,本质区别是顺序容器可以通过元素在容器中的位置进行访问及存储,而关联容器只能通过键来访问和存储元素 顺序容器常 ...

  3. 顺序容器及其常用函数

    前言 容器是指容纳特定类型对象的集合.顺序容器则是指该容器根据位置访问保存在其中的对象.Vector,List,Deque是三种常见的容器,本文将归纳这三种容器常用的函数,以备日后查阅. 描述符说明 ...

  4. 顺序容器(vector、list、string、deque、forward_list)及迭代器、容器适配器

    文章目录 概述 所有容器都支持的操作 迭代器 迭代器支持的操作 迭代器支持的算术运算 容器类型 size_type iterator 和 const_iterator 容器定义和初始化 拷贝初始化 顺 ...

  5. STL 容器和迭代器连载6_顺序容器的操作3

    2019独角兽企业重金招聘Python工程师标准>>> /*- ========================================================== ...

  6. 《C++ Primer中文版(第五版)》 第九章 顺序容器

    <C++ Primer中文版(第五版)> 第九章 顺序容器 元素在顺序容器中的顺序与其加入容器时的位置相对应.关联容器中元素的位置由元素相关联的关键字值决定. 所有容器都共享公共的接口,不 ...

  7. 《C++Primer》第九章-顺序容器-学习笔记(1)-顺序容器定义与操作

    <C++Primer>第九章-顺序容器-学习笔记(1) 文章目录 <C++Primer>第九章-顺序容器-学习笔记(1) 摘要 顺序容器的定义 容器元素的初始化 将一个容器初始 ...

  8. C++ Primer 第九章 顺序容器

    由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...

  9. C++ Primer 第9章 顺序容器 第一次学习笔记

    1. 顺序容器概述 #include <vector> //可变大小数组.支持快速随机访问.在尾部之外的位置插入或删除元素可能很慢 #include <deque> //双端队 ...

最新文章

  1. 背景se_SE新作《先驱者》首个内容预告 定于2020年圣诞发售
  2. 神经网络模拟条件反射
  3. 发现一个骨灰级图形学大神的博客
  4. Hebbian principle理解
  5. 22. Yii 组件属性
  6. ubuntu 14.04 编译yocto源码--环境配置篇
  7. 拼写检查器——朴素贝叶斯应用
  8. qplot函数添加回归曲线R方方差分析表
  9. win10多台计算机共享文件夹设置密码,win10系统给共享文件夹设置密码的操作方法...
  10. Exchange 日常管理六之:创建邮箱数据库
  11. 和领导相处的10条法则,越早知道越好
  12. 【Python数据挖掘课程】八.关联规则挖掘及Apriori实现购物推荐
  13. C语言二维数求矩阵每行的最大值与最小值
  14. 编写程序,输出如下图形2
  15. php opcode逆向还原,[原创]VM代码的还原-插件篇
  16. 360浏览器怎么导入html,如何将360浏览器收藏网页导入到火狐浏览器中
  17. 终年32岁的传奇数学家,为何让硅谷领袖们集体落泪致敬?
  18. css语法---选择器
  19. Appscan测试工具简介
  20. oracle+union+连接,Oracle中union/union all/Intersect/Minus用法

热门文章

  1. 八、Pandas的基本使用
  2. LeetCode 332. 重新安排行程(欧拉路径)
  3. LeetCode 949. 给定数字能组成的最大时间(暴力)
  4. LeetCode 114. 二叉树展开为链表(递归)
  5. 聚类算法 距离矩阵_快速且不需要超参的无监督聚类方法
  6. mysql堵塞等级_MySQL 事务隔离级别
  7. 小案例:编写立方体六个面,合成一张全景图后端
  8. 自动化运维Shell课堂笔记
  9. TCP程序流程及服务器客户端
  10. Android显存到内存拷贝耗时,memcpy速度太慢?掌握这个技术让内存拷贝效率成倍提升...