详解C++中STL常用容器-创新互联
目录
创新互联2013年至今,是专业互联网技术服务公司,拥有项目成都网站建设、网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元西岗做网站,已为上家服务,为西岗各地企业和个人服务,联系电话:18980820575一、什么是STL
二、Sequence Containers(维持顺序的容器)
①vector(动态数组)
②list(双向链表)
二、Container Adaptors(基于其他容器实现的数据结构)
①stack(栈)
②queue(队列)
三、Associative Containers(实现了排好序的数据结构)
①set有序集合
②multiset
③map
④multimap
四、Unordered Associative Containers:对每个 Associative Containers 实现了哈希版本。
①unordered_set:哈希集合
②unordered_multiset
③unordered_map:哈希映射或我哈希表
④unordered_multimap
一、什么是STL
从根本上说,STL是一些“容器”的集合,并且也有一些其他内容,比如:向量(vector)、栈(stack)、队列(queue)、优先队列(priority_queue)、链表(list)、集合(set)、映射(map)等容器;min、max、swap、sort、lower_bound、upper_bound 等算法。
总之,STL是提高C++编写效率的一个利器。
在本文中重点介绍Sequence Containers,Container Adaptors,Associative Containers,Unordered Associative Containers. 其中重点介绍前两个部分,后两个部分简单提一下。
其他一些常见的库函数详情请见:这里!!
二、Sequence Containers(维持顺序的容器) ①vector(动态数组)任意位置vector是变长数组,支持随机访问,不支持在任意位置O(1)插入。为了保证效率,元素的增删一般应该在末尾进行,是我们最常使用 的数据结构之一。
头文件:#include
创建和初始化:在创建和初始化的时,要考虑数据类型、数据的个数以及数据的值。
vector//空的整型vector
vectorvec2(3) //一个有3个元素的vector,初始值为编译器默认
vectorvec3(3,'a') //含有3个a的字符vector
vectorvec4(vec3) //拷贝了vec3
vectora({1,2,3,4,5}) //对数组的初始化
关于迭代器:相当于STL容器的指针,可以用“*"来解除引用。
一个保存int的vector的迭代器声明方法:vector
添加 / 插入元素:在尾部进行
a.push_back(6) //尾部插入数字6
a.pop_back() //删除最后一个元素
使用下标访问元素:
a[i]
遍历:for+auto比较快
void text()
{
vectora={1,2,3,4,5};
for(auto x : a)
{
cout<
②list(双向链表)由于链表不支持快速随机读取,因此我们很少用到这个数据结构,也有一个例外,是经典的LRU问题,需要用链表的特性解决。
关于链表,还可以看看我之前的文章:数据结构1 链表
#include#includeusing namespace std;
//构造方法
listl1;
listl2(5,3); //5个3
int main(){
//遍历
for(auto e : l1)
{
cout<
二、Container Adaptors(基于其他容器实现的数据结构)
①stack(栈)栈是基本的数据结构之一,特点是先进后出。就像一叠记录待办事项的便利贴,插入的便利贴只能放在这一清单的最上面;读取时也只能读取最上面的那一个,并将其扔掉。因此一般只要两种操作:压入(插入)和弹出(删除并读取)
stack 常用于深度优先搜索,一些字符串匹配问题和单调栈问题。
头文件:#include
常用操作:
#include#includeusing namespace std;
int main(){
stackq;
int x;
cin>>x;
q.push(x); //将x压入栈顶
q.top(); //读取栈顶的元素
q.pop(); //删除栈顶的元素
q.size(); //返回栈中元素的个数
q.empty(); //检查栈是否为空,若为空返回true,否则返回false
}
②queue(队列)queue是一种先进先出的数据结构。顾名思义,它有两个出口,容器允许从一端新增元素,从另一端移除元素。队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为。
队列中进数据称为入队(push),这就像一个通着的水管,入队像水随着水进推着向前。
queue 常用于广度优先搜索。
头文件:#include
构造与赋值:
queuea; //构造
queue; //拷贝构造函数
queue& operator=(const queue &que); //重载等号操作符
数据存取:
push(elem); //往队尾添加元素
pop(); //从队头移除第一个元素
back(); //返回最后一个元素
front(); //返回第一个元素
大小操作:
empty(); //判断堆栈是否为空
size(); //返回栈的大小
三、Associative Containers(实现了排好序的数据结构)
①set有序集合有序集合,元素不可重复,底层实现默认为红黑树,即一种特殊的二叉查找树(BST)。已可以在O(nlog n) 的时间排序数组,Ologn) 的时问插入、删除、查找任意值,O(ogn) 的时间获得最小或大值。这里注意,set 和 priority _queue 都可以用于维护数据结构并快速获取大最小值,但是它们的时间复杂度和功能略有区别,priority_queue 默认 不支持删除任意值,而 set获得大或最小值的时间复杂度略高,具体使用哪个根据需求而定。
②multiset支持重复元素的 set。
③map有序映射或有序表,在set的基础上加上映射关系,可以对每个元素key存一个值value。
④multimap支持重复元素的map。
四、Unordered Associative Containers: 对每个 Associative Containers 实现了哈希版本。 ①unordered_set:哈希集合
可以在 O(1)的时间快速插人、查找、删除元素,常用于快 速的查询一个元素是否在这这个容器内。
②unordered_multiset支持重复元素的 unordered_set。
③unordered_map:哈希映射或我哈希表在 unordered_set 的基础上加上映射关系,可以对每一个元素 key 存一个值 value。在某些情况下,如果key 的范围已知且较小,我们也可以用 vector 代替 unordere d_map,用位置表示 key,用每个位置的值表示 value。
④unordered_multimap支持重重复元素的unordered_map
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
文章名称:详解C++中STL常用容器-创新互联
本文路径:http://ybzwz.com/article/hshgj.html