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. SMU Summer 2023 Contest Round 4

    SMU Summer 2023 Contest Round 4 A. Telephone Number 满足第一个8后面存在10个字符即可 #include <bits/stdc++.h> ...

  2. tomcat发布两个项目报错webAppKey重复设置

    两个项目的web.xml中都有一个日志监听器配置 <listener> <listener-class> org.springframework.web.util.Log4jC ...

  3. Vite+Vue3 项目 华仔待办

    此"华仔",不是彼"华仔",你懂的! 先来了个截图 紧跟着,实现步骤也来了 1. 安装 Node.js,终端运行 npm create vue@latest,项 ...

  4. 【Python + Appium】之元素定位总结(更新)

    一.ID定位 uiautomatorviewer里面的:resource-id driver.find_element(By.ID,"com.csks.businesses:id/tv_nu ...

  5. 【Git代码仓库】之合并分支代码操作到主干代码上(界面版/命令版)

    一.代码管理仓库,合并分支代码到主干(界面版*) 1.从远程Git代码仓库克隆到本地 # Git克隆 git clone git@e.coding.net:XXX/SQM/SC_WEB_Project ...

  6. 【YashanDB知识库】手动停止统计信息自动收集任务导致的性能变差

    [问题分类]功能使用 [关键字]统计信息收集 [问题描述]UAT对外演示环境因统计信息收集任务引起数据库整理性能变慢无应急处理手段 [问题原因分析] ● DROP_JOB程序用于删除一个非执行状态下的 ...

  7. Centos7.9安装Docker和Docker compose

    什么是docker环境 Docker环境是指在计算机中安装和配置了Docker引擎的运行环境.Docker是一种容器化平台,它提供了一种轻量级的虚拟化技术,能够将应用程序及其依赖项打包成一个独立的容器 ...

  8. C#自定义控件—仪表盘

    C#用户控件之仪表盘 如何让温度.湿度.压力等有量程的监控值如仪表盘(DashBoard)一样显示? 思路(GDI绘图): 定义属性:(仪表盘的半径.颜色.间隙:刻度圆的半径.颜色.字体:指针的颜色. ...

  9. 城市时空预测的统一数据管理和综合性能评估 [实验、分析和基准]《Unified Data Management and Comprehensive Performance Evaluation for Urban Spatial-Temporal Prediction [Experiment, Analysis & Benchmark]》

    2023年11月1日,还有两个月,2023年就要结束了,希望在结束之前我能有所收获和进步,冲呀,老咸鱼. 论文:Unified Data Management and Comprehensive Pe ...

  10. CSS – initial, Inherit, unset, revert

    参考 Understanding the "Initial", "Inherit" and "Unset" CSS Keywords [译] ...