[C++ Primer] 顺序容器
顺序容器
顺序容器概述
- 下标列出了标准库中的顺序容器,所有顺序容器都提供了快速顺序访问元素的能力。这些容器在以下方面都有不同的性能折中:
- 向容器添加或从容器中删除元素的代价
- 非顺序访问容器中元素的代价
2. 若不确定应该使用哪种容器,可以在程序中只使用vector和list公共的操作:**使用迭代器**,不适用下标操作,避免随机访问。这样,在必要时选择使用vector或list都很方便。
容器库概览
容器操作
迭代器范围
左闭合区间[begin,end)容器定义和初始化
每个容器都定义了一个默认构造函数,除array之外,其他容器的默认构造函数都会创建一个指定类型的空容器,且都可以接受指定容器大小和元素初始值的参数。
虽然不能对内置数组类型进行拷贝或对象赋值操作,但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类型的一部分,
赋值运算
顺序容器操作
向顺序容器添加元素
emplace函数在容器中直接构造元素,传递给emplace函数的参数必须与元素类型的构造函数相匹配。
访问元素操作
访问成员函数(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中元素
}
删除元素操作
forward_list中插入或删除操作
改变容器大小的操作
vector对象是如何增长的
管理容量的成员函数
调用reserve之后,capacity将会大于或等于传递给reserve的参数。
额外的string操作
构造string的其他方法
子字符串操作
修改string的操作
string搜索操作

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

默认情况下,stack和queue是基于deque实现的,priority_queue是在vector之上实现的。我们可以在创建一个适配器时将一个命名的顺序容器作为第二个类型参数,来重载默认容器类型。
// 在vector上实现的空栈
stack<string, vector<string>> str_stk;
栈适配器
定义在stack头文件中
队列适配器
定义在queue头文件中

标准库queue使用一种先进先出(first-in, first-out, FIFO)的存储和访问策略。
[C++ Primer] 顺序容器的更多相关文章
- C++ Primer 第九章 顺序容器
由于书籍上写的已经很经典了,故大部分用图片的形式来阐述概念,代码纯手打进行验证. 1.顺序容器类型:vector.deque.list.forword_list.array.string. 2.顺序容 ...
- C++ Primer : 第九章 : 顺序容器的操作以及迭代器失效问题
顺序容器的添加.访问.删除操作以及forward_list的特殊操作,还有迭代器失效问题. 一.向容器添加元素 // array不支持这些操作 // forward_list有自己撰于的版本的inse ...
- C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap
顺序容器属于C++ STL的一部分,也是非常重要的一部分. 顺序容器包括: std::vector,包含在头文件<vector>中 std::string, 包含在头文件<strin ...
- C++ Primer 随笔 Chapter 9 顺序容器
参考:http://www.cnblogs.com/kurtwang/archive/2010/08/19/1802912.html 1..顺序容器:vector(快速随机访问):list(快速插入 ...
- C++ Primer 5th 第9章 顺序容器
练习9.1:对于下面的程序任务,vector.deque和list哪种容器最为适合?解释你的选择的理由.如果没有哪一种容器优于其他容器,也请解释理由.(a) 读取固定数量的单词,将它们按字典序插入到容 ...
- C++ Primer 读书笔记: 第9章 顺序容器
第9章 顺序容器 引: 顺序容器: vector 支持快速随机访问 list 支持快速插入/删除 deque 双端队列 顺序容器适配器: stack 后进先出栈 queue 先进先出队列 priori ...
- C++ Primer 有感(顺序容器)
1.顺序容器的元素排列次序与元素的值无关,而是由元素添加到容器里的次序决定. 2. 顺序容器 vector 支持快速随机访问 list ...
- C++ Primer 笔记——顺序容器
1.标准库中定义了一些顺序容器,所有顺序容器都提供了快速顺序访问元素的能力. 2.如果容器的元素类型没有默认构造函数,那么在构造这个容器的时候不能只指定这个容器的数目,因为没有办法默认构造这些元素. ...
- [C++ Primer] 第9章: 顺序容器
顺序容器概述 顺序容器的类型有: 类型 说明 vector 可变长度数组. 支持快速随机访问. deque 双端队列. 支持快速随机访问. list 双向链表. 只支持双向顺序访问. forward_ ...
- 细嚼慢咽C++primer(5)——顺序容器
1 顺序容器的定义 容器是容纳特定类型对象的集合. 顺序容器:将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,这就是顺序容器. 标准库的三种顺序容器类型:vector, list 和 ...
随机推荐
- 如何禁止 SQL Server 中的 xp_cmdshell 以提高安全性
概述 在 SQL Server 中,xp_cmdshell 是一个强大的功能,它允许执行操作系统级别的命令.然而,这也带来了潜在的安全风险.本文将详细介绍如何禁止 xp_cmdshell,以增强 SQ ...
- C# Winform 中使用字体图标
http://www.bubuko.com/infodetail-1923328.html 需要将 &#x 替换成 \u 最终是\ue603 //使用方法protected override ...
- 前端开发系列121-进阶篇之defineProperty
本文介绍`Object.defineProperty()`方法,并基于此简单讨论数据劫持的实现方案. defineProperty Object.getOwnPropertyDescriptor(ta ...
- 前端开发系列055-基础篇之Vue项目实现多语言支持
插件介绍 介绍:Vuei18n 是 Vue.js 的国际化插件.它可以轻松地将一些本地化功能集成到你的 Vue.js 应用程序中. 安装:npm install vue-i18n 或者 yarn ad ...
- 前端开发系列031-基础篇之BOM
本文介绍BOM相关的知识点,介绍的重点在于BOM核心Window对象的成员细节. BOM简单介绍 我们已经知道JavaScript的范围包括ECMAScript(语言核心) + DOM(文档对象模型) ...
- ubuntu 开机自动启动程序
简介 RT 参考链接 https://www.cnblogs.com/downey-blog/p/10473939.html 下面的链接靠谱些 https://zhuanlan.zhihu.com/p ...
- 如何选择最适合企业的ETL解决方案?
在今天的大数据时代,企业的数据管理和处理变得愈发重要.企业也越来越依赖于数据仓库和数据湖来提取.转换和加载(ETL)关键业务信息.一个高效.灵活的ETL解决方案不仅能提升数据处理能力,还能为企业决策提 ...
- ETL结合飞书快速实现业务信息同步
一.ETL工具介绍 ETLCloud数据集成平台是一款针对IT以及数据工程师推出的全域数据集成平台产品.它是集实时数据集成和离线数据集成以及API发布为一体的数据集成平台.与其他开源数据集成工具相比, ...
- 使用django-crispy-forms美化表单UI
前言 欧克,继续来写这个中台项目衍生出来的系列文章 今天介绍一个可以美化界面的库 Django 开发讲究个快,天下武功,唯快不破 forms 功能自然是要用的,自带表单 UI 生成和验证,实现 dem ...
- P4795 [BalticOI 2018] 基因工程 题解
题目传送门:Click. 蒟蒻看见这道题,想了足足一个小时,过后顿有所悟,故作此篇. 首先,看到题目,光是数据就已经达到了 \(\operatorname{O}(nm)\) 的级别,再看一看数据范围: ...