[C++ Primer] 顺序容器
顺序容器
顺序容器概述
- 下标列出了标准库中的顺序容器,所有顺序容器都提供了快速顺序访问元素的能力。这些容器在以下方面都有不同的性能折中:
- 向容器添加或从容器中删除元素的代价
- 非顺序访问容器中元素的代价

容器库概览
-
容器操作
-
迭代器范围
左闭合区间[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)的存储和访问策略。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)