cpp stl数据结构介绍

本文深入探讨了STL(标准模板库)的核心组成部分,包括vector、deque和list三种序列式容器,以及set和map两种关联式容器。vector作为动态数组,适合随机访问但插入删除操作较慢;deque支持快速两端操作;list是双向链表,适合任意位置高效操作。set和map基于红黑树实现,自动排序并提供了快速查找。此外,还介绍了STL的常见算法如find、sort等,并强调了多线程环境下STL的安全性问题。

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

(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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值