【C++】STL常用容器总结之二:顺序容器
来源:互联网 发布:大公司如何混淆js代码 编辑:程序博客网 时间:2024/05/17 12:51
3、顺序容器
所谓序列式容器,其中的元素都可序(ordered),但未必有序(sorted)。array为C++语言内置的序列容器,STL另外提供vector、list、deque、stack、queue等等顺序式容器。它们的差别在于访问元素的方式,以及添加或删除元素相关操作的运行代价。
标准库还提供了三种容器适配器(adapter),所谓适配器是根据原始的容器类型所提供的操作,通过定义新的操作接口,来适应基础的容器类型。顺序容器适配器包括stack、queue、priority_queue等序列式容器。其中stack和queue由于只是将deque改头换面而成,技术上被归类为一种适配器,priority_queue是有优先级管理的队列。
1、顺序容器的构造函数
顺序容器主要介绍3种,即vector、list、deque,相应的头文件为:
#include<vector> #include<list> #include<deque>
以下介绍的函数适用于所有顺序容器(vector、list、deque),故在下文不再介绍。
C<T> c;
创建一个名为 c 的空容器。C 是容器类型名,如 vector,list,T 是元素类型,如 int 或 string。适用于所有容器。
C<T> c(c2);
创建容器 c2 的副本 c;c 和 c2 必须具有相同的容器类型,并存放相同类型的元素。适用于所有容器。
C<T> c(b, e);
创建 c,其元素是迭代器 b 和 e 标示的范围内元素的副本。适用于所有容器。
C<T> c(n, t);
用 n 个值为 t 的元素创建容器 c,其中值 t 必须是容器类型 C 的元素类型的值,或者是可转换为该类型的值。
C<T> c(n);
只适用于顺序容器,创建有 n 个值初始化元素的容器 c。
2、顺序容器的一些其他操作
- 将一个容器初始化为另一个容器的副本
当不使用默认构造函数,而是用其他构造函数初始化顺序容器时,必须指出该容器有多少个元素,并提供这些元素的初值。同时指定元素个数和初值的一个方法是将新创建的容器初始化为一个同类型的已存在容器的副本。将一个容器复制给另一个容器时,类型必须匹配:容器类型和元素类型都必须相同。 - 初始化为一段元素的副本
尽管不能直接将一种容器内的元素复制给另一种容器,但是可以使用一对迭代器间接实现该功能。使用迭代器时,不要求容器类型相同,容器内的元素类型也可以不相同,只要他们相互兼容。迭代器标记了要复制的元素范围,这些元素用于初始化新容器的元素。迭代器标记出要复制的第一个元素和最后一个元素。采用这种初始化形式可复制不能直接复制的容器。 - 分配和初始化指定数目的元素
创建顺序容器时,可显式指定容器大小和一个(可选的)元素初始化式。容器大小可以是常量或非常量表达式,元素初始化则必须是可用于初始化其元素类型的对象的值。 不提供元素初始化式时,标准库将为该容器实现值初始化。采用这种类型的初始化,元素类型必须是内置或复合类型,或者是提供了默认构造函数的类类型。如果元素类型没有默认构造函数,则必须显式指定其元素初始化式。接受容器大小做形参的构造函数只适用于顺序容器,而关联容器不支持这种初始化。
3、顺序容器的一些其他函数
assign操作首先删除容器内所有的元素,再将参数所指定的新元素插入到容器中。swap操作不会删除或插入任何元素,而且保证在常量时间内实现交换。由于容器内没有移动任何元素,因此迭代器不会失效。但要注意这些迭代器指向了另一个容器中的元素。
- 【C++】STL常用容器总结之二:顺序容器
- 【C++】STL常用容器总结之六:基于deque的顺序容器适配器
- 【C++】STL常用容器总结之十一:容器小结
- STL总结之顺序容器
- 【STL】STL之顺序容器和关联容器总结
- STL容器之顺序容器
- 【c++】stl顺序容器
- STL之顺序容器
- STL 之顺序容器
- STL之顺序容器
- 【C++】STL常用容器总结之三:向量vector
- 【C++】STL常用容器总结之四:链表list
- 【C++】STL常用容器总结之八:映射map
- 【C++】STL常用容器总结之九:集合set
- 【C++】STL常用容器总结之十二:string类
- STL之顺序容器和关联容器总结
- 【C++】STL常用容器总结之一:容器与迭代器
- 【C++】STL常用容器总结之七:对组pair与关联容器
- 快速排序实现
- 最初的最初
- 【个人喜好诗词之一】再别康桥
- 获取高德地图省市区县列表
- Android开发---Viewpager+Fragment使用指南
- 【C++】STL常用容器总结之二:顺序容器
- leetcodeOJ 168
- CentOS更改yum源与更新系统
- (二)ELK学习之LogStash
- 重新出发,脚踏实地
- HTTP 长连接和短连接
- ELK 问题记录
- 笔记:C++学习之旅---引用
- CSU 1588 合并果子