C++容器(STL容器)
发布时间:2020-12-16 07:41:32 所属栏目:百科 来源:网络整理
导读:容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在 STL 中都被实现为容器。 程序员使用容器时,即将容器类模板实例化为容器类时,会指明容器中存放的元素是什么类型的。 容器中可以存放基本类型的变量,也可以存放对象。对象
容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在 STL 中都被实现为容器。 程序员使用容器时,即将容器类模板实例化为容器类时,会指明容器中存放的元素是什么类型的。 容器中可以存放基本类型的变量,也可以存放对象。对象或基本类型的变量被插入容器中时,实际插入的是对象或变量的一个复制品。 STL 中的许多算法(即函数模板),如排序、查找等算法,在执行过程中会对容器中的元素进行比较。这些算法在比较元素是否相等时通常用运算符进行,比较大小通常用 < 运算符进行,因此,被放入容器的对象所属的类最好重载== 和< 运算符,以使得两个对象用== 和< 进行比较是有定义的。容器分为两大类。 顺序容器顺序容器有以下三种:可变长动态数组 vector、双端队列 deque、双向链表 list。它们之所以被称为顺序容器,是因为元素在容器中的位置同元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置(尾部、头部或中间某处)插入,元素就会位于什么位置。 关联容器关联容器有以下四种:set、multiset、map、multimap。关联容器内的元素是排序的。插入元素时,容器会按一定的排序规则将元素放到适当的位置上,因此插入元素时不能指定位置。默认情况下,关联容器中的元素是从小到大排序(或按关键字从小到大排序)的,而且用 < 运算符比较元素或关键字大小。因为是排好序的,所以关联容器在查找时具有非常好的性能。除了以上两类容器外,STL 还在两类容器的基础上屏蔽一部分功能,突出或增加另一部分功能,实现了三种容器适配器:栈 stack、队列 queue、优先级队列 priority_queue。 为称呼方便起见,本教程后面将容器和容器适配器统称为容器。 容器都是类模板。它们实例化后就成为容器类。用容器类定义的对象称为容器对象。 例如, vector<int> 是一个容器类的名字,vector<int> a; 就定义了一个容器对象 a,a 代表一个长度可变的数组,数组中的每个元素都是 int 类型的变量;vector<double> b; 定义了另一个容器对象 b,a 和 b 的类型是不同的。本教程后文所说的“容器”,有时也指“容器对象”,读者需要根据上下文自行判别。任何两个容器对象,只要它们的类型相同,就可以用 <、<=、>、>=、==、!= 进行词典式的比较运算。假设 a、b 是两个类型相同的容器对象,这些运算符的运算规则如下。
所有容器都有以下两个成员函数:
顺序容器和关联容器还有以下成员函数:
如果一个容器是空的,则 begin() 和 end() 的返回值相等,rbegin() 和 rend() 的返回值也相等。 顺序容器还有以下常用成员函数:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |