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. WinUI 3学习笔记(1)—— First Desktop App

    随着Visual Studio 2019 16.10版本的正式发布,创建WinUI 3的APP对我们来说,已不存在任何的难度.本篇我们就试着来一探究竟,看看WinUI 3 APP到底是个啥玩意,能不能 ...

  2. python安装和使用常见问题以及解决技巧

    1. 快速切换pip版本  pip install pip==22.2 此处22.2代表版本号 , 自动加载压缩包自动切换 2. py窗口程序不能挂代理!!!!!!!!!!!!!!!!!!!!!!!! ...

  3. WinForm 使用委托动态更新数据

    使用委托动态更新数据 详细代码 // 声明一个委托,用于更新消息的文本提示 private delegate void UpdateMsgTextDelegate(string text); // 定 ...

  4. Android Camera2Video整合到自己项目里

    背景: Android项目里调用摄像头拍摄视频,原本使用的 MediaStore.ACTION_VIDEO_CAPTURE, 后来因项目需要,改成了camera2 1.Camera2Video 官方d ...

  5. git 相关操作

        git diff 已经缓存的文件和刚刚修改过的没有缓存的文件的对比 git diff --stage   git status 查看本地文件的修改,是否进入缓存 git add 把刚刚修改过的 ...

  6. mysql事务隔离级别及MVCC 原理

    一.事务的隔离级别 为了保证事务与事务之间的修改操作不会互相影响,innodb希望不同的事务是隔离的执行的,互不干扰. 两个并发的事务在执行过程中有 读读.读写(一个事务在读某条数据的同时另一个事务在 ...

  7. C++17: 用折叠表达式实现一个IsAllTrue函数

    前言 让我们实现一个 IsAllTrue 函数,支持变长参数,可传入多个表达式,必须全部计算为true,该函数才返回true. 本文记录了逐步实现与优化该函数的思维链,用到了以下现代C++新特性知识, ...

  8. C++ std::shared_ptr自定义allocator引入内存池

    当C++项目里做了大量的动态内存分配与释放,可能会导致内存碎片,使系统性能降低.当动态内存分配的开销变得不容忽视时,一种解决办法是一次从操作系统分配一块大的静态内存作为内存池进行手动管理,堆对象内存分 ...

  9. tailwindcss 经验

    树摇时扫描的文件范围 根据 tailwindcss.config.js 中 content 的配置,跟打包软件加载的模块无关.即未使用的模块中的 class 也会被包含进来.

  10. maven安装本地jar命令

    mvn install:install-file -Dfile=jar包的位置 -DgroupId=pom.xml的groupId -DartifactId=pom.xm的artifactId -Dv ...