STL容器简介

STL 标准模板库
 
容器类型
以前的11个容器类型
deque、list、queue、priority_queue、stack、vector、map、multimap、set、multiset、bitset
C++11 新增了 
forward_list、unordered_map、unordered_multimap、unordered_set、unordered_multiset,且不将bitset视为容器,而视为独立的类型


vector 数组的一种类表示,头文件vector
deque 双端队列,头文件deque
list 双向链表,头文件list
forward_list (C++11) 单链表
queue 适配器类,让底层类(默认为deque)展示典型的队列接口,只有队列的基本操作,头文件queue
priority_queue 适配器类,支持操作与queue相同,区别,最大元素被移到队首,默认底层类是vector,可以修改用于确定哪个元素放在队首的比较方式,方法是提供一个可选的构造函数参数(参数为函数),头文件queue
stack 适配器类,给底层类(默认为vector)提供典型的栈接口,头文件stack
set 关联容器,值类型与键相同,键是唯一的,模板参数二为可选,指定排列比较函数或对象,默认less<>
multiset 可能有多个值的键相同,模板参数一为键类型,二为值类型,三可选同set二。 
map 值与键的类型不同,键是唯一的,每个键只对应一个值
multimap 一个键可以与多个值关联,STL把键和数据用pair<class T,class U>存储到一个对象,要插入,可创建一个pair 然后调用multiset 的insert 。 pair对象可以使用first 和second 访问其两个部分


容器概念
基本容器
1.容器是存储其它对象的对象,被存储的对象必须是同一类型
2.类型必须是可复制构造和可赋值的
3.基本容器不能保证元素按特定的顺序存储,也不能保证元素顺序不变
序列
1.迭代器至少是正向迭代器,保证了元素该特定顺序排列
2.元素按严格的线性顺序排列
序列包括 7 种容器 deque、list、queue、stack、vector、priority_queue、C++11新增的forward_list
关联容器
1.将值与键关联起来
2.底层基于树结构
4种关联容器 set、multiset、mao、multimap
无序关联容器 (C++11)
1.将值与键关联起来
2.底层基于哈希表
4种无序关联容器 unordered_set、unordered_multiset、unordered_map、unordered_multimap


# STL 容器模板都接受一个可选的模板参数,该参数指定使用哪个分配器对象来管理内存,默认使用allocator<T>类,这个类使用new 和 delete

转载于:https://www.cnblogs.com/xyyh/p/3980296.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
STL(Standard Template Library)是C++标准库中的一个重要组成部分,提供了一系列的容器类,如vector、list、map等。STL容器本身并不是线程安全的,也就是说,在多线程环境下同时对同一个容器进行读写操作可能会导致数据竞争和不确定的结果。 然而,C++标准库并没有提供原生的线程安全的STL容器。如果需要在多线程环境下使用STL容器,可以考虑以下几种方式: 1. 互斥锁(Mutex):使用互斥锁来保护对STL容器的读写操作。在每次访问容器之前,先获取互斥锁,操作完成后释放锁。这样可以确保同一时间只有一个线程能够对容器进行操作,从而避免数据竞争。 2. 读写锁(Read-Write Lock):使用读写锁来实现对STL容器的读写操作。读写锁允许多个线程同时读取容器,但只有一个线程能够进行写操作。这样可以提高读取性能,但写操作仍然需要互斥保护。 3. 并发容器:一些第三方库或框架提供了线程安全的STL容器的实现,如Intel TBB(Threading Building Blocks)库中的concurrent_vector、concurrent_map等。这些容器在内部使用了锁或其他机制来保证线程安全性。 需要注意的是,使用线程安全的STL容器并不能完全解决多线程编程中的所有并发问题,仍然需要合理地设计和管理线程间的同步与通信。此外,使用锁或其他同步机制可能会引入额外的开销和复杂性,需要权衡使用的场景和性能需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值