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. 2023 ICPC 杭州游记

    题解 省流:三个 NOI 银牌合成一个 ICPC 区域赛银牌 感谢 gjy 的铜钱剑 和 hszx 的大家玩得很开心 两个联赛数据结构没做出来

  2. posix是什么都不知道,还好意思说你懂Linux?

    Linux开发者越来越多,但是仍然有很多人整不明白POSIX是什么.本文就带着大家来了解一下到底什么是POSIX,了解他的历史和重要性. 一.什么是posix? 1. 概念 POSIX:可移植操作系统 ...

  3. 卧槽,牛逼!vue3的组件竟然还能“暂停”渲染!

    前言 有的时候我们想要从服务端拿到数据后再去渲染一个组件,为了实现这个效果我们目前有几种实现方式: 将数据请求放到父组件去做,并且使用v-if控制拿到子组件后才去渲染子组件,然后将数据从父组件通过pr ...

  4. 使用 prerenderRoutes 进行预渲染路由

    title: 使用 prerenderRoutes 进行预渲染路由 date: 2024/8/20 updated: 2024/8/20 author: cmdragon excerpt: prere ...

  5. Win32 插入符光标跟随的打字小程序

    1.先创建插入符光标 在WM_CREATE消息中 LRESULT OnCreate(HWND hWnd, WPARAM wParam, LPARAM lParam) { HDC hdc = GetDC ...

  6. pc 移动端 双端切换-路由判断

    该封装主要以分类形式,实现对路由的简易区分.便于项目管理. 创建好项目,勾选路由插件,会自动生成 router文件夹与index.ts . index.ts 初始内容 创建项目 自动生成的router ...

  7. JVM笔记二双亲委派机制

    JVM笔记二双亲委派机制 JVM双亲委派机制,简单来说:我爸是李刚,有事找我爸.用三个字来说:往上捅.不信?咱们一起看看. ​ JVM的双亲委派机制 JVM类加载器是什么机制?为什么使用这种机制(这种 ...

  8. 专业级语义搜索优化:利用 Cohere AI、BGE Re-Ranker 及 Jina Reranker 实现精准结果重排

    专业级语义搜索优化:利用 Cohere AI.BGE Re-Ranker 及 Jina Reranker 实现精准结果重排 1. 简介 1.1 RAG 在说重排工具之前,我们要先了解一下 RAG. 检 ...

  9. 1p-frac:已开源,仅用单张分形图片即可媲美ImageNet的预训练效果 | ECCV 2024

    分形几何是一个数学分支,主要应用于作图方面.一般来说,分形经过无数次递归迭代后的结果.比如取一条线段,抹去中间的三分之一,会得到长度是原三分之一长的两条线段,中间隔着相同长度的间隙.然后重复这个动作, ...

  10. 无法加载nodejs\vue.ps1

    发现问题 刚换了电脑之后,安装了node.js.vue/cli,在vscode中使用vue ui命令新建vue项目时,发现报错如下: 分析问题 多番查询后发现,一般此类问题大多出现在第一次运行脚本的电 ...