C++中的容器(STL容器)container
1.容器
- 容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在STL中都被实现为容器。使用容器时,即将容器类模板实例化为容器类时,会指明容器中存放的元素是什么类型的。容器中可以存放基本类型的变量,也可以存放对象。对象或基本类型的变量被插入容器中时,实际插入的是对象或变量的一个复制品。
- STL中的许多算法(即函数模板),如排序、查找等算法,在执行过程中会对容器中的元素进行比较。这些算法在比较元素是否相等时通常用运算符进行,比较大小通常用<运算符进行。因此,被放入容器的对象所属的类最好重载==和<运算符,以使得两个对象用==和<进行比较是有定义的。
2.容器的分类(2种)
顺序容器
- 顺序容器有以下三种:可变长动态数组vector、双端队列deque、双向链表list。它们之所以被称为顺序容器,是因为元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置(尾部、头部或中间某处)插入,元素就会位于什么位置。
关联容器
- 关联容器有以下四种:set、multiset、map、multimap。关联容器内的元素是排序的。插入元素时,容器会按一定的排序规则将元素放到适当的位置上,因此插入元素时不能指定位置。默认情况下,关联容器中的元素是从小到大排序(或按关键字从小到大排序)的,而且用<运算符比较元素或关键字大小。因为是排好序的,所以关联容器在查找时具有非常好的性能。
3.容器适配器
- 除了以上两类容器外,STL还在两类容器的基础上屏蔽一部分功能,突出或增加另一部分功能,实现了三种容器适配器:栈 stack、队列 queue、优先级队列 priority_queue。为称呼方便起见,下面将容器和容器适配器统称为容器。
4.容器的解释及常用方法
- 容器都是类模板,它们实例化后就成为容器类,用容器类定义的对象称为容器对象。例如vector是一个容器类的名字;vector a;定义了一个容器对象a,a代表一个长度可变的数组,数组中的每个元素都是int类型的变量;vector b;定义了另一个容器对象b,a和b的类型是不同的。本文后所说的“容器”,有时也指“容器对象”,需要根据上下文自行判别。
vector<int> // 是一个容器类的名字vector<int> a; // 容器对象a,a代表一个长度可变的数组,数组中的每个元素都是int类型的变量vector<double> b; // 容器对象b,定义了另一个容器对象b,a和b的类型是不同的
- 任何两个容器对象,只要它们的类型相同,就可以用<、<=、>、>=、==、!=进行词典式的比较运算。假设a、b是两个类型相同的容器对象,这些运算符的运算规则如下:
- a == b:若a和b中的元素个数相同,且对应元素均相等,则a==b的值为true,否则值为false。元素是否相等是用==运算符进行判断的;
- a < b:规则类似于词典中两个单词比较大小,从头到尾依次比较每个元素,如果发生a中的元素小于b中的元素的情况,则a < b的值为 true;如果没有发生b中的元素小于a中的元素的情况,且a中的元素个数比b少,a < b的值也为true;其他情况下值为false。元素比较大小是通过<运算符进行的;
- a != b:等价于!(a == b);
- a > b:等价于b < a;
- a <= b:等价于!(b < a);
- a >= b:等价于!(a < b).
- 所有容器都有以下两个成员函数:
- int size():返回容器对象中元素的个数
- bool empty():判断容器对象是否为空
- 顺序容器和关联容器还有以下成员函数:
- begin():返回指向容器中第一个元素的迭代器
- end():返回指向容器中最后一个元素后面的位置的迭代器
- rbegin():返回指向容器中最后一个元素的反向迭代器
- rend():返回指向容器中第一个元素前面的位置的反向迭代器
- erase(…):从容器中删除一个或几个元素。该函数参数较复杂,此处省略
- clear():从容器中删除所有元素,如果一个容器是空的,则begin()和end()的返回值相等,rbegin()和rend()的返回值也相等
- 顺序容器还有以下常用成员函数:
- front():返回容器中第一个元素的引用
- back():返回容器中最后一个元素的引用
- push_back():在容器末尾增加新元素
- pop_back():删除容器末尾的元素
- insert(…):插入一个或多个元素,该函数参数较复杂,此处省略
C++中的容器(STL容器)container相关推荐
- 复习笔记(九)——C++中的容器(STL容器)
STL定义 STL(Standard Template Library),即标准模板库,是一个高效的C++程序库.被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/I ...
- 【小白学习C++ 教程】二十一、C++ 中的STL容器Arrays和vector
@Author:Runsen C++的标准模板库(STL)是提供数组.向量.队列等数据结构的模板类的集合.STL是由容器.算法.迭代器组成的库. 容器 容器存储对象和数据.它们基本上是基于模板的泛型类 ...
- C++ STL : 模拟实现STL中的关联式容器unordered_map/unordered_set
目录 unordered_map/unordered_set unordered_map/unordered_set与map/set的区别 底层哈希桶的改造 仿函数 Key值的获取方法 hash(ke ...
- STL 容器中的元素必须满足的条件
STL中的容器.迭代器.算法都是模板,因此可以操作任何型别.不论是STL预先定义好的或用户自行定义的都可以.然而,由于某些加诸于元素身上的操作行为,某些需求条件也就相应出现了.STL容器元素必须满足以 ...
- C++中STL容器利用迭代器删除元素小结
C++中STL容器利用迭代器删除元素小结 在STL容器中删除元素,容易导致迭代器失效,故应该清楚明白其用法,现在总结一下. 转载自:https://blog.csdn.net/yf_li123/art ...
- 【贪玩巴斯】C++提高编程,掌握STL中最关键的容器技术~(三){map、set、list、queue、stack 五大容器一篇解决!} //2021-08-25
// day_03 // Created by AchesonD16 贪玩巴斯 on 2021/8/19. 1. stack容器 (栈) 1.1 stack 基本概念 栈 概念: stack是一种 ...
- Docker中无法正常结束容器的解决思路 - Docker cannot kill or stop container
Docker中无法正常结束容器的解决思路 - Docker cannot kill or stop container 步骤 查找无法删除的容器的ID: # docker ps |grep " ...
- C++ 笔记(19)— 标准模板库(STL容器、STL迭代器、STL算法、STL容器特点、STL字符串类)
C++ 标准库可以分为两部分: 标准函数库: 这个库是由通用的.独立的.不属于任何类的函数组成的.函数库继承自 C 语言. 面向对象类库: 这个库是类及其相关函数的集合. C++ 标准库包含了所有的 ...
- STL容器的线程安全
STL容器是线程不安全的. 线程安全的情况 多个读取者是安全的.多线程可能同时读取一个容器的内容,这将正确地执行.当然,在读取时不能 有任何写入者操作这个容器. 对不同容器的多个写入者是安全的.多线程 ...
最新文章
- Emgu-WPF学习使用-识别二维码的位置
- linux 命令常驻,Linux下任务调度的crond常驻命令
- win10安装mysql5.6,mysql启动时,闪退
- 什么是 jQuery 事件
- ecshop首页调用指定分类的所有产品(指定一级调二级)
- IBASE search
- 学习hashtable,处理“海量”数据
- html实现小键盘,js之软键盘实现(源码) _javascript教程
- v50进9008救砖
- Netbean UML自动生成类图
- 计算机毕业设计JAVA便利店系统mybatis+源码+调试部署+系统+数据库+lw
- (一)阿里云创建自己的产品和设备
- 个人信贷不良资产管理 难题亟待解决
- poj 1284 Primitive Roots 求素数元根数
- 用tikz画球坐标系下的体积微元
- EXCEL内容很少文件却很大---如何变小
- 没想到华为P20的投屏功能,还可以这么强大!
- 如何用tushare复盘
- OUC暑期培训(深度学习)——第五周学习记录:ShuffleNet EfficientNet 迁移学习
- mysql介绍(myisam)
热门文章
- 创建虚拟环境 安装pytorch 0.3.1
- HDU 1024:Max Sum Plus Plus(DP)
- 下一代 Service Mesh -- istio 架构分析
- Stylus插件开发教程
- nginx+keepalived高可用web架构
- 服务器租用之服务器带宽情况分析
- 一个十分简短的Tween
- Docker员工自述:我们为什么“输”给了Kubernetes?
- 字节首推Java成长笔记:(原理+应用+源码+调优全都有)
- 昨天晚上,亲眼目睹了我一哥们的崩溃,被空降90后上司鄙视,说他这种人在公司......