1、总述

C++ STL(Standard Template Library)是 C++ 标准库的一部分,包括了许多数据结构的实现,提供了许多好用的轮子,同时,其设计思想也非常值得学习。其中,容器是 STL 中最重要的一部分,它是一种高效的数据存储和管理方式,能够方便地处理不同类型的数据,并提供许多常用的操作,如插入、删除、查找等。

2、容器分类

C++ STL 容器分为两大类:序列型容器和关联型容器。

2.1 序列型容器

序列型容器包括 vector、list、deque 等,它们都是基于数组或链表实现的,能够处理连续或非连续的内存。
vector:vector 是一种动态数组容器,它能够自动分配空间,支持随机访问和顺序访问。vector 适用于对大小进行频繁变动的容器,如存储动态数据等。
list:list 是一种双端链表容器,它不进行内存分配,支持随机访问和顺序访问。list 适用于对元素进行频繁添加、删除和遍历等操作。
deque:deque 是一种双端队列容器,它能够自动分配空间,并支持随机访问和顺序访问。deque 适用于对首元素进行频繁添加、删除和遍历等操作。

2.2 关联型容器

关联型容器是 C++ STL 中另一种重要的容器,它们以关键字(key)为索引,存储一组有序的键值对(key-valuepair),并提供了快速的查找、插入和删除等操作。关联容器包括以下几种:
map:map 是一种基于红黑树实现的关联容器,它以 key 为索引,存储一组有序的键值对。map 适用于需要根据 key 进行查找、插入和删除等操作的场景。
multimap:multimap 是一种基于红黑树实现的关联容器,它以 key 为索引,存储多组有序的键值对。multimap 适用于需要根据 key 进行查找、插入和删除等多组数据的场景。
set:set 是一种基于哈希表实现的关联容器,它以 key 为索引,存储一组唯一的键值对。set 适用于需要根据 key 进行查找、插入和删除等操作的场景。
multiset:multiset 是一种基于哈希表实现的关联容器,它以 key 为索引,存储多组唯一的键值对。multiset 适用于需要根据 key 进行查找、插入和删除等多组数据的场景。

3、容器的优缺点

C++容器具有许多优点,如动态分配空间、访问高效、支持随机访问等。然而,它也有一些缺点:
资源消耗:容器需要额外的空间来存储元数据(如大小、容量等),这可能会导致额外的内存消耗。
性能损失:部分容器操作可能涉及额外的计算,如哈希表的哈希函数、红黑树的旋转操作等,这可能会影响性能。
通用性限制:部分容器可能只能存储特定类型的数据,如向量只能存储对象,不能存储函数指针等。

4、总结

容器是 C++ STL 中非常重要的一部分,能够方便地处理不同类型的数据,并提供许多常用的操作,如插入、删除、查找等。其中,序列型容器和关联型容器是容器的两大类,分别适用于不同的场景。掌握容器的原理、使用场景和方法,能够提高程序开发的效率和代码可读性,对于开发工作有很大的好处。

C++ STL 容器简介的更多相关文章

  1. STL 容器简介

    一.概述 STL 对定义的通用容器分三类:顺序性容器.关联式容器和容器适配器. 顺序性容器是一种各元素之间有顺序关系的线性表.元素在顺序容器中保存元素置入容器时的逻辑顺序,除非用删除或插入的操作改变这 ...

  2. STL容器简介

    stl不是面向对象的编程,而是一种不同的编程模式————泛型编程 我们常用到的STL容器有vector.list.deque.map.multimap.set.multiset 顺序性容器:vecto ...

  3. STL容器及算法题:删除奇数的QQ号

    最近思考到这样一个题目:在STL的set和vector容器里存储了1亿个QQ号,编写函数删除奇数QQ号. 1. STL容器简介 首先了解一下 set 和 vector 以及其他类似的 STL 容器: ...

  4. STL的简介

    Standard Template Library,(标准模板库)<来自百度百科的整理> ————可复用性(reusability) STL是基于模板,内联函数的使用使得生成的代码短小高效 ...

  5. STL map 简介

    STL map 简介 转载于:http://www.cnblogs.com/TianFang/archive/2006/12/30/607859.html 1.目录 map简介 map的功能 使用ma ...

  6. STL容器

    啦啦啦,今天听啦高年级学长讲的STL容器啦,发现有好多东西还是有必要记载的,毕竟学长是身经百战的,他在参加各种比赛的时候积累的经验可不是一天两天就能学来的,那个可是炒鸡有价值的啊,啊啊啊啊啊 #inc ...

  7. c++ stl容器set成员函数介绍及set集合插入,遍历等用法举例

    c++ stl集合set介绍 c++ stl集合(Set)是一种包含已排序对象的关联容器.set/multiset会根据待定的排序准则,自动将元素排序.两者不同在于前者不允许元素重复,而后者允许. 1 ...

  8. STL容器删除元素的陷阱

    今天看Scott Meyers大师的stl的用法,看到了我前段时间犯的一个错误,发现我写的代码和他提到错误代码几乎一模一样,有关stl容器删除元素的问题,错误的代码如下:std::vector< ...

  9. 【转】c++中Vector等STL容器的自定义排序

    如果要自己定义STL容器的元素类最好满足STL容器对元素的要求    必须要求:     1.Copy构造函数     2.赋值=操作符     3.能够销毁对象的析构函数    另外:     1. ...

  10. GDB打印STL容器内容

    GDB调试不能打印stl容器内容,下载此文件,将之保存为~/.gdbinit就可以使用打印命令了. 打印list用plist命令,打印vector用pvector,依此类推. (gdb) pvecto ...

随机推荐

  1. 树莓派CM4(二): UART/IIC/SPI调试

    1. 参考资料 资料汇总页面 https://shumeipai.nxez.com/raspberry-pi-datasheets <bcm2711-peripherals.pdf>,下载 ...

  2. Windows中Powershell中的 rm -rf 等效命令

    Remove-Item  -Recurse  -Force  <要删除的目录> 可以简写为: rm -r -fo  <要删除目录>

  3. k8s手动安装

    一.主节点安装 设置主机名hostnamectl set-hostname masterhostnamectl set-hostname node01 修改hosts文件vim /etc/hosts1 ...

  4. C# Winform 使用 BarTender打印条码

    目录 - 1. 使用软件BarTender 设计打印模板 - 2. Winfrom集成打印 - 3.最终效果 - 1. 使用软件BarTender 设计打印模板 贴一个入门级使用教程:https:// ...

  5. Session的运行机制

    浏览器通过web访问服务器,服务器的web服务开启后,第一步就是开启session,这也是session的第一阶段: session_start() 这个函数的作用:开启session,然后根据以前设 ...

  6. 【YashanDB知识库】应用绑定参数的慢查询,慢日志抓取不到

    [问题分类]功能使用 [关键字]慢日志.绑定参数 [问题描述]应用下发的绑定参数的SQL,慢日志功能抓取不到查询耗时超过阈值的执行SQL [问题原因分析]慢日志的功能没有考虑绑定参数的情况 [解决/规 ...

  7. AWS Data Analytics Fundamentals 官方课程笔记 - Variety, Veracity, Value

    Variety structured data applications include Amazon RDS, Amazon Aurora, MySQL, MariaDB, PostgreSQL, ...

  8. c程序设计语言 by K&R(五)UNIX系统接口

    一.文件描述符 在unix操作系统中,所有的外围设备(包括键盘和显示器)都被看作是文件系统的文件,因此,所有的输入.输出都要通过读/写文件来完成.也就是说,通过一个单一的接口就可以处理外围设备和程序之 ...

  9. Java中使用BigDecimal进行double类型的计算(高精度,可保留几位小数)

    Java中 小数直接进行乘除运算,会出现精度问题导致计算结果有误需要使用 BigDecimal 类型辅助运算,保证精度无误源码: import java.math.BigDecimal;import ...

  10. C#|.net core 基础 - 深拷贝的五大类N种实现方式

    在实际应用中经常会有这样的需求:获取一个与原对象数据相同但是独立于原对象的精准副本,简单来说就是克隆一份,拷贝一份,复制一份和原对象一样的对象,但是两者各种修改不能互相影响.这一行为也叫深克隆,深拷贝 ...