cpp stl数据结构介绍

14 篇文章 1 订阅
2 篇文章 0 订阅

(0)总体

  • 所有stl头文件不包含.h
  • stl体现了泛型编程的思想,就操作与数据分离。
  • stl中包含:容器,迭代器,算法。
  • 常用容器有:
    <序列式容器>:元素有固定位置,元素位置与插入顺序有关,与元素值无关,有:vector(向量),deque(双端队列),list (列表)
    <关联式容器>:属于已序集群,元素位置与元素值与排序关系有关,与插入次序无关,有:set(集合),map(映射),mutiset(多重集合),mutimap(多重映射)
  • 常用算法有:
    find,count,min,max,min_element,max_element,search,equal,sort,(lambda)

(1)逐一介绍

vector
  • 数据结构:数组。内存不够时从新分配新数组,再复制。属于连续空间。
  • 特点:随机访问快,中间插入、删除慢(时间:n),末尾插入、删除快,常用做堆栈,[]快。
  • 注意:如果想要更好的效率,可以在初始化后使用resize()函数。vector在多线程不安全:

A:程序崩溃,因为线程A vector进行写时,如果内存已满会重新申请内存,此时它的地址已经改变,而线程B依旧在写入/读入已经无效的地址,就会造成崩溃。可以初始化很大区间或者加上进程同步锁。

deque(double-ended queue)
  • 数据结构:页链表,在前/尾段增加新空间,内存要分配一段空间,维护整体连续的假象。
  • 特点:两端操作快,中间操作慢,按页或块分配内存,每页容纳固定数目元素,deque是list与vector的折中方案,[]快。
list(double linked list)
  • 数据结构:双向链表,内存空间不连续。
  • 特点:任意地方操作效率高,不提供[]重载,访问开始结束元素快,随机访问慢。
set(集合)
  • 数据结构:红黑树(一种平衡搜索树),内部元素自动排序,每个元素只能出现一次,结构体需要重载运算符"<"(重载需要保证唯一性),大部分操作复杂度为:log(n)。
  • 特点:自动排序好的,map与set的插入删除效率高。
map(映射)
  • 数据结构:红黑树,每个元素需要有键值,基于键值排序,一对一映射,键值结构体也需要重载运算符"<",大部分操作为log(n)。
  • 特点:自动建立key-value,对于迭代器,可以修改实值,不可以修改key。
mutiset,mutimap
  • 支持重复元素/键值的set/map

(3)其他

  • 容器共性
    empty(),size().
  • 迭代器有:
    begin()
    end()
    rbegin()
    rend()
    clear()
    erase(it)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值