顺序容器

顺序容器概述

  1. 下标列出了标准库中的顺序容器,所有顺序容器都提供了快速顺序访问元素的能力。这些容器在以下方面都有不同的性能折中:

    • 向容器添加或从容器中删除元素的代价
    • 非顺序访问容器中元素的代价

2. 若不确定应该使用哪种容器,可以在程序中只使用vector和list公共的操作:**使用迭代器**,不适用下标操作,避免随机访问。这样,在必要时选择使用vector或list都很方便。

容器库概览

  1. 容器操作

  2. 迭代器范围

    左闭合区间 [begin,end)

  3. 容器定义和初始化

    每个容器都定义了一个默认构造函数,除array之外,其他容器的默认构造函数都会创建一个指定类型的空容器,且都可以接受指定容器大小和元素初始值的参数。

  4. 虽然不能对内置数组类型进行拷贝或对象赋值操作,但array并无此限制:

    int digs[10] = {0,1,2,3,4,5,6,7,8,9};
    int cpy[10] = digs; // 错误: 内置数组不支持拷贝或赋值
    array<int,10> digits = {0,1,2,3,4,5,6,7,8,9};
    array<int,10> copy = digits; // 正确:只要数组类型匹配即合法

    与其他容器一样,array也要求初始值的类型必须与创建的容器类型相同。此外,array还要求元素类型和大小也都一样,因为大小也是array类型的一部分,

  5. 赋值运算

顺序容器操作

  1. 向顺序容器添加元素

  2. emplace函数在容器中直接构造元素,传递给emplace函数的参数必须与元素类型的构造函数相匹配。

  3. 访问元素操作

  4. 访问成员函数(front、back、下标和at)返回的是引用

    if(!c.empty()){
    c,front = 42; // 将42赋值c首元素
    auto &v = c.back(); // 获得指向最后一个元素的引用
    v = 1024; // 该变c中元素
    auto v2 = c.back(); // v2不是引用,是c.back()的拷贝
    v2 = 0; // 未改变c中元素
    }
  5. 删除元素操作

  6. forward_list中插入或删除操作

  7. 改变容器大小的操作

vector对象是如何增长的

  1. 管理容量的成员函数

​ 调用reserve之后,capacity将会大于或等于传递给reserve的参数。

额外的string操作

  1. 构造string的其他方法

  2. 子字符串操作

  3. 修改string的操作

  4. string搜索操作

  5. 比较操作

  6. string与数值之间的转换

容器适配器(adaptor)

  1. 标准库还定义了三个顺序容器适配器:stackqueuepriority_queue。容器、迭代器和函数都有适配器。本质上,一个适配器是一种机制,能使某种事物的行为看起来像另外一种事物一样。一个容器适配器接受一个顺序容器,使其行为看起来像一种不同的类型。例如,stack适配器接受一个顺序容器(除array和forward_list外),并使其操作看起来像一个stack一样。

  2. 默认情况下,stack和queue是基于deque实现的,priority_queue是在vector之上实现的。我们可以在创建一个适配器时将一个命名的顺序容器作为第二个类型参数,来重载默认容器类型

    // 在vector上实现的空栈
    stack<string, vector<string>> str_stk;
  3. 栈适配器

    定义在stack头文件中

  4. 队列适配器

    定义在queue头文件中

​ 标准库queue使用一种先进先出(first-in, first-out, FIFO)的存储和访问策略。

[C++ Primer] 顺序容器的更多相关文章

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

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

  2. C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题

    顺序容器的添加.访问.删除操作以及forward_list的特殊操作,还有迭代器失效问题. 一.向容器添加元素 // array不支持这些操作 // forward_list有自己撰于的版本的inse ...

  3. C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap

    顺序容器属于C++ STL的一部分,也是非常重要的一部分. 顺序容器包括: std::vector,包含在头文件<vector>中 std::string, 包含在头文件<strin ...

  4. C++ Primer 随笔 Chapter 9 顺序容器

     参考:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html 1..顺序容器:vector(快速随机访问):list(快速插入 ...

  5. C++ Primer 5th 第9章 顺序容器

    练习9.1:对于下面的程序任务,vector.deque和list哪种容器最为适合?解释你的选择的理由.如果没有哪一种容器优于其他容器,也请解释理由.(a) 读取固定数量的单词,将它们按字典序插入到容 ...

  6. C++ Primer 读书笔记: 第9章 顺序容器

    第9章 顺序容器 引: 顺序容器: vector 支持快速随机访问 list 支持快速插入/删除 deque 双端队列 顺序容器适配器: stack 后进先出栈 queue 先进先出队列 priori ...

  7. C++ Primer 有感(顺序容器)

    1.顺序容器的元素排列次序与元素的值无关,而是由元素添加到容器里的次序决定. 2. 顺序容器 vector                               支持快速随机访问 list   ...

  8. C++ Primer 笔记——顺序容器

    1.标准库中定义了一些顺序容器,所有顺序容器都提供了快速顺序访问元素的能力. 2.如果容器的元素类型没有默认构造函数,那么在构造这个容器的时候不能只指定这个容器的数目,因为没有办法默认构造这些元素. ...

  9. [C++ Primer] 第9章: 顺序容器

    顺序容器概述 顺序容器的类型有: 类型 说明 vector 可变长度数组. 支持快速随机访问. deque 双端队列. 支持快速随机访问. list 双向链表. 只支持双向顺序访问. forward_ ...

  10. 细嚼慢咽C++primer(5)——顺序容器

    1 顺序容器的定义 容器是容纳特定类型对象的集合. 顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器. 标准库的三种顺序容器类型:vector, list 和 ...

随机推荐

  1. pg 获取指定字符串的位置,截取字符串

    position 获取的下标是从1开始 ,substr是0开始 ,所有得 +1 substr('123456|234567',position('|' in '123456|23456' )+1,13 ...

  2. GSS 全做

    等我学了 fhq-treap 再 remake 一遍 I 板子 II 离线,顺便维护历史最值,感觉难写. III 板子 IV 每个数被开方次数很少,线段树暴力 V 分类讨论 若区间不交,则 ans=[ ...

  3. 将各种实体类转成JSON(com.alibaba.fastjson.JSONObject)

    当和其他系统对接时,因为某些原因,本系统需要根据不同条件查询不通的实体类,并以JSON格式传输数据,需要将各种实体类转成json 1 public <U> JSONObject proce ...

  4. 这几个 Vibe Coding 经验,真的建议学!

    大家好,我是 Immerse,一名独立开发者.内容创作者.AGI 实践者. 关注公众号:#沉浸式趣谈,获取最新文章(更多内容只在公众号更新) 个人网站:https://yaolifeng.com 也同 ...

  5. js定时器高级用法

    //////////////////////////////////////////////批量执行方法start var delegateArray = []; var DeArr = { AddF ...

  6. TODO FIXME XXX 含义

    转载: https://www.cnblogs.com/pengyingh/articles/2445826.html 代码里面增加的小注释. 实际上,在阅读一些开源代码时,我们常会碰到诸如:TODO ...

  7. java group Layout 组框架

    简介 https://netbeans.org/features/java/swing.html 里面有一个mattise 专门用来生成布局代码 GroupLayout code 代码先不贴了

  8. ETL与ELT核心技术解析:如何选择最优数据集成方案

    在数字化转型浪潮中,数据集成作为企业数据战略的核心环节,ETL与ELT两种技术路径的抉择直接影响着数据处理效率.本文将通过谷云科技在数据集成领域的实践经验,深入解析两种模式的本质差异与应用场景. 技术 ...

  9. 华为HCIE-AI笔试题解析

    HCIE-AI笔试题 1.以下关于Google论文中标准transformer structure优点描述正确的有哪些选项?(多选) A.可以获取输入的全局依赖信息. B.Transformer的En ...

  10. css 美化原生的table样式

    先看效果图 对应的美化代码 css <style> table.gridtable { font-family: verdana,arial,sans-serif; font-size:1 ...