STL容器介绍

news/2024/7/20 15:57:53 标签: 数据结构与算法, 内存管理

STL的容器可以分为以下几个大类:
一:序列容器:  有vector, list, deque, string.

二: 关联容器:    有set, multiset, map, mulmap, hash_set, hash_map, hash_multiset, hash_multimap

三: 其他的杂项: 有stack, queue, priority_queue,valarray, bitset

STL各个容器的实现:

(1) vector
内部数据结构:数组。
随机访问每个元素,所需要的时间为常量。
在末尾增加或删除元素所需时间与元素数目无关,在中间或开头增加或删除元素所需时间随元素数目呈线性变化。
可动态增加或减少元素,内存管理自动完成,但程序员可以使用reserve()成员函数来管理内存。
vector的迭代器在内存重新分配时将失效(它所指向的元素在该操作的前后不再相同)。当把超过capacity()-size()个元素插入vector中时,内存会重新分配,所有的迭代器都将失效;否则,指向当前元素以后的任何元素的迭代器都将失效。当删除元素时,指向被删除元素以后的任何元素的迭代器都将失效。

(2)deque
内部数据结构:数组。
随机访问每个元素,所需要的时间为常量。
在开头和末尾增加元素所需时间与元素数目无关,在中间增加或删除元素所需时间随元素数目呈线性变化。
可动态增加或减少元素,内存管理自动完成,不提供用于内存管理的成员函数。
增加任何元素都将使deque的迭代器失效。在deque的中间删除元素将使迭代器失效。在deque的头或尾删除元素时,只有指向该元素的迭代器失效。

(3)list
内部数据结构:双向环状链表。
不能随机访问一个元素。
可双向遍历。
在开头、末尾和中间任何地方增加或删除元素所需时间都为常量。
可动态增加或减少元素,内存管理自动完成。
增加任何元素都不会使迭代器失效。删除元素时,除了指向当前被删除元素的迭代器外,其它迭代器都不会失效。

(4)slist
内部数据结构:单向链表。
不可双向遍历,只能从前到后地遍历。
其它的特性同list相似。

(5)stack
适配器,它可以将任意类型的序列容器转换为一个堆栈,一般使用deque作为支持的序列容器。
元素只能后进先出(LIFO)。
不能遍历整个stack。

(6)queue
适配器,它可以将任意类型的序列容器转换为一个队列,一般使用deque作为支持的序列容器。
元素只能先进先出(FIFO)。
不能遍历整个queue。

(7)priority_queue
适配器,它可以将任意类型的序列容器转换为一个优先级队列,一般使用vector作为底层存储方式。
只能访问第一个元素,不能遍历整个priority_queue。
第一个元素始终是优先级最高的一个元素。

(8)set
键和值相等。
键唯一。
元素默认按升序排列。
如果迭代器所指向的元素被删除,则该迭代器失效。其它任何增加、删除元素的操作都不会使迭代器失效。

(9)multiset
键可以不唯一。
其它特点与set相同。

(10)hash_set
与set相比较,它里面的元素不一定是经过排序的,而是按照所用的hash函数分派的,它能提供更快的搜索速度(当然跟hash函数有关)。
其它特点与set相同。

(11)hash_multiset
键可以不唯一。
其它特点与hash_set相同。

(12)map
键唯一。
元素默认按键的升序排列。
如果迭代器所指向的元素被删除,则该迭代器失效。其它任何增加、删除元素的操作都不会使迭代器失效。

(13)multimap
键可以不唯一。
其它特点与map相同。

(14)hash_map
与map相比较,它里面的元素不一定是按键值排序的,而是按照所用的hash函数分派的,它能提供更快的搜索速度(当然也跟hash函数有关)。
其它特点与map相同。

(15)hash_multimap
键可以不唯一。
其它特点与hash_map相同。

转载于:https://www.cnblogs.com/alionxd/articles/3028346.html


http://www.niftyadmin.cn/n/1027441.html

相关文章

1087:级数求和(C C++)

【题目描述】 已知:Sn1+1/2+1/3+…+1/n。显然对于任意一个整数k,当n足够大的时候,Sn大于k。现给出一个整数k(1≤k≤15),要求计算出一个最小的n,使…

自学HarmonyOS应用开发(48)- Tablist组件进阶

在应用开发中经常会用到Tablist组件,连载中也介绍了该组件的基本用法: 自学鸿蒙应用开发(17)- TabList和Tab 但是有一个问题是这篇文章,包括HarmonyOS应用开发的官方文档都只是实现了Tab切换的基本功能,对…

1088:分离整数的各个数(C C++)

【题目描述】 给定一个整数n(1≤n≤100000000),要求从个位开始分离出它的每一位数字。从个位开始按照从低位到高位的顺序依次输出每一位数字。 【输入】 输入一个整数,整数在1到100000000之间。 【输出】 从个位开始按照从低位到高位的顺序依次输出…

自学HarmonyOS应用开发(49)- 引入地图功能

秒表应用的功能就是计时,其中有一种情况就是计算地图上两点之间移动的时间。但是作者在实际使用这个应用的时候,经常会忘了在预定地点开始和停止计时。解决这个问题的想法就是为秒表应用增加预定地点自动开始和停止计时的功能。如果可能最好还能计算跑圈…

从微信公众平台说起

最近写博客的频度远不如以前,主要是想要求自己尽量保证每篇博文的质量,每次想写博客的时候,就发现想写的内容很简单(浅薄),根本不值一写,于是就搁置了。平时关注互联网的内容也比较多&#xff0…

1089:数字反转(C C++)

【题目描述】 给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零,例如输入−380,反转后得到的新数为−83。 【输入】…

顺序栈的建立及操作

问题:建立顺序栈还是比较简单的。主要是一开始在入栈操作中每次调用初始化栈函数&#xff0c;结构出错。 代码&#xff1a; #include <iostream> #include <cstdlib> using namespace std; #define MAXSIZE 20 typedef struct SeqStack {int stack [MAXSIZE];int t…

1090:含k个3的数(C C++)

【题目描述】 输入两个正整数m和k&#xff0c;其中1<m<100000&#xff0c;1<k<5 &#xff0c;判断m 能否被19整除&#xff0c;且恰好含有k个3&#xff0c;如果满足条件&#xff0c;则输出YES&#xff0c;否则&#xff0c;输出NO。 例如&#xff0c;输入&#xff1…