1、Sequence Containers:维持顺序的容器
(a)、vetor
(1)创建一维vector
vector<int> nums;//不指定长度
vector<int> nums(n); //指定长度为n
添加元素
nums.push_back(1);//直接从数组末端添加
nums[i]=1;//直接赋值给第i个位置
删除元素
nums.resize(nums.size-1)
nums.pop_back()
获得长度:nums.size()
排序(O(nlogn)):sort(nums,begin(),nums.end());
翻转:reverse(nums.begin(),nums.end());
合并两个vector:合并nums1和nums2,并将合并后的数组赋值给nums
vector<int> nums1(m),nums2(n);
vector<int> nums;
nums.resize(m+n);
merge(nums1.begin(),nums1.end(),nums2.begin(),nums2.end(),nums)
(2)创建m*n的二维vector:直接定义
vector<vector<int>> nums(m,vector<int>(n)); //m*n的二维vector
定义了一个vector容器,元素类型为vector,初始化包含了m个vector对象,每个对象都是一个新创立的vector对象的拷贝,而这个新创立的vector对象被初始化为包含n个0。
vector(n)表示够早了一个无名且含n个0的vector对象。
动态创建m*n的二维vector
方法1:
vector<vector<int>> nums;
nums.resize(m);
for(int i=0;i<m;i++) nums[i].resize(n);
方法2:
vector<vector<int>> nums;
nums.resize(m,vector<int>(n));
初始化二维数组
vector<vector<int>> nums=vector(m,vector<int>(n,0));
//m*n的二维vector,所有元素为0
(b)、list:双向链表。
也可以当做stack和queue使用,用在经典的LRU问题中,需用利用链表的特性来解决。
(c)、deque:双端队列
非常强大的数据结构,既支持O(1)随机读取,又支持O(1)时间的头部增删和尾部增删,不过有一定的额外开销。
(d)、array和forward_list:固定大小的数组和单向链表
2、Container Adaptors:基于其他容器实现的数据结构
(a)、stack:后入先出的数据结构,默认基于deque实现。常用语深度优先搜索、字符串匹配问题和单调栈问题。
(b)、queue:先入先出的数据结构,基于deque实现。deque常用于广度优先搜索。
(c)、priority_queue:最大值先出的数据结构,基于vector实现堆结构。可以在O(nlogn)的时间排序数组,O(logn)的时间插入任意值。
3、Associative Containers:实现了较好的数据结构
(a)、set:有序集合,元素不可重复,底层默认为红黑树,即一种特殊的二叉查找树(BST)。它可以在O(nlogn)的时间排序数组,O(logn)的时间插入、删除、查找任意值,O(logn)的时间获得最小或最大值。但是它们的时间复杂度和功能略有区别,如priority_queue默认不支持删除任意值,而set获得最大或最小值的时间复杂度略高。
(b)、multiset:支持重复元素的set。
(c)、有序映射或有序表。在set的基础上加上映射关系,可以对每个元素可以存一个值value。
4、unordered Associative Containers:对每个Associative Containers实现了哈希版本
(a)unordered_set:哈希集合,可以在O(1)的时间快速插入、查找、删除元素,常用于快速的查询一个元素是否在这个容器内。
(b)unordered_multiset:支持重复元素的unordered_set。
(c)unordered_map:哈希映射或哈希表。
(d)unordered_multimap:支持重复元素的unordered_map。
本文详细介绍了C++标准库中的各种容器,包括Sequence Containers、Container Adaptors和Associative Containers等,涵盖了vector、list、deque、stack、queue、set、multiset、map、unordered_set、unordered_map等数据结构的创建、操作及应用场景。
515

被折叠的 条评论
为什么被折叠?



