浅析C++中STL容器与其数据结构

本文介绍了C++ STL中的顺序容器,包括vector、list、deque、stack、queue、priority_queue以及C++11的std::array和std::forward_list。顺序容器中,vector是最常用的,其内部实现为动态数组,支持随机访问但插入删除中间元素效率较低。list以双向链表形式实现,适合频繁插入删除操作。deque则支持快速的头尾插入删除和随机访问。此外,还讨论了关联类容器,如map、set、unordered_map和unordered_set,它们基于红黑树或哈希表实现,提供键值对存储。文章最后概述了STL容器的通用性质,如元素拷贝和非线程安全性。
摘要由CSDN通过智能技术生成

如果写c++程序那么STL容器是不可避免要使用的,而正确合理地使用这些容器才能够简化我们的程序、提高运行的效率,所以这篇我们就来简单介绍下STL容器内部的故事。

一、顺序容器

顺序容器:是一种各元素之间有顺序关系的线性表,是一种线性结构的可序群集。顺序性容器中的每个元素均有固定的位置,除非用删除或插入的操作改变这个位置。顺序容器的元素排列次序与元素值无关,而是由元素添加到容器里的次序决定。

1、vector

vector应该是我们使用的最多的stl容器了。它的本质是动态数组,在堆中分配内存(allocator),元素连续存放,有保留内存,如果减少大小后,内存也不会释放;如果新值大于当前大小时才会重新分配内存。

本质上vector就是数据结构里的顺序表

顺序表是在计算机内存中以数组的形式保存的线性表,线性表的顺序存储是指用一组地址连续的存储单元依次存储线性表中的各个元素、使得线性表中在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中,即通过数据元素物理存储的相邻关系来反映数据元素之间逻辑上的相邻关系,采用顺序存储结构的线性表通常称为顺序表。顺序表是将表中的结点依次存放在计算机内存中一组地址连续的存储单元中。

vector有以下特点:

  1. 随机存取快速 o(1)
  2. 删除插入中间元素需要移动其他元素 o(n)
  3. 新增元素如果超过当前容量首先尝试扩容两倍
  4. erase并不会删除内存,此时vector容量不会减少
  5. clear也并不会删除内存,只是把size置为0(可以使用这种方法清除V的内存:vector<int>().swap(V);)
  6. vector的内存扩充实际上是申请一个更大的内存,之后将原内存处数据拷贝过去。

2、list

vector虽然能够支持随机读取,但是插入删除效率过低,这时我们就需要使用list。

list的数据

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值