boolan——c++学习笔记之容器

本文详细介绍了C++标准库中的各种容器类型,包括array、vector、deque等的基本特性、存储方式及增删元素的时间复杂度。此外,还探讨了使用这些容器时需要注意的问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


一、各容器内存存储结构



二、各容器特征描述

(1)array

创建:固定长度;

存储方式:连续存储数组;

访问元素:随机访问;

增减元素:不支持;


(2) vector

创建:不定长度,单向增长;

存储方式:连续存储数组,增加元素时内存动态增加大于元素大小;

访问元素:可随机访问;

增减元素:尾加减元素时间复杂度尾O(1),中间加减元素时间复杂度尾O(n);


(3)deque

创建:不定长度,双向增长;

存储方式:外部表现连续存储数组,增加元素时内存动态增长块

访问元素:可随机访问;

增减元素:头尾加减元素时间复杂度尾O(1);


(4)list

创建:不定长度,任意插入;

存储方式:不连续存储双向循环链表;

访问元素:双向顺序遍历访问,时间复杂度尾O(n)

增减元素:任意位置加减元素时间复杂度尾O(1);


(5)forward_list

创建:不定长度,任意插入;

存储方式:不连续存储单向链表;

访问元素:从前往后顺序遍历访问,时间复杂度尾O(n)

增减元素:任意位置加减元素时间复杂度尾O(1);


(6)slist(非标准容器)

forward_list


(7)stack

deque的适配器,元素不能遍历,只能后进先出。


(8)queue

deque的适配器,元素不能遍历,只能先进先出。


(9)priority_queue

vector的适配器,只能访问第一个元素,并且始终是优先级最高元素。


(10)set

创建:不定长度,键值就是数值,键值唯一;

存储方式:红黑树存储;

访问元素:时间复杂度O(logN)

增减元素:时间复杂度O(logN)


(11)multiset

键值不唯一,其他同set;


(12)map

创建:不定长度,有键值和元素组成,键值唯一;

存储方式:红黑树存储;

访问元素:时间复杂度O(logN)

增减元素:时间复杂度O(logN)


(13)multimap

键值不唯一,其他同map


(14)unordered_set

创建:不定长度,键值就是数值,键值唯一;

存储方式:哈希表;

访问元素:时间复杂度O(1)

增减元素:时间复杂度O(1)


(15)unordered_multiset
键值不唯一,其他同unordered_set


(16)unordered_map

创建:不定长度,有键值和元素组成,键值唯一;

存储方式:哈希表;

访问元素:时间复杂度O(1)

增减元素:时间复杂度O(1)


(17)unordered_multimap

键值不唯一,其他同unordered_map


(18)hash_set
非标准库,同unordered_set


(19)hash_multiset
非标准库,同unordered_multiset


(20)hash_map
非标准库,同unordered_map


(21)hash_multimap
非标准库,同unordered_mutimap


三、容器使用注意点

(1)容器内有函数同标准库函数一样,则优先考虑容器内函数,因为每个容器针对本身的结构实现不同方法,效率更高,如sort,find;

(2)迭代器遍历容器到最后,指向最后一个元素的后一个位置,不能做解引用操作;

(3)用auto关键字方便容器遍历。如:

vector<double> vct;

for(auto elem :vct){

statement; //遍历容器元素,不改变容器元素内容

}

for(auto &elem :vct){

statement; //遍历容器元素,改变容器元素内容

}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值