C++容器(SRTL容器)

转载自:C语言中文网。仅供自己学习参考。如果侵权,联系可删。

容器(container)用于存放数据的类模板。可变长数组、链表、平衡二叉树等数据结构在STL中都被实现为容器。

类模板:对一批仅仅是成员数据类型不同的类的抽象。一个类模板可以用来生成多种具体的类(类模板的实例)。

使用容器时,即将容器类模板实例化为容器类时,需要指明容器中存放的元素是什么类型的。

容器中可以存放基本类型的变量,也可以存放对象。对象或基本类型的变量被插入容器中时,实际插入的是对象或变量的一个复制品。

STL中的许多算法,如排序、查找等算法,在执行过程中会对容器中的元素进行比较。这些算法通常用运算符来比较元素是否相等,比较大小通常用<运算符进行。因此,被放入容器的对象所属的类最好重载==和<运算符,使得两个对象用==<进行比较是有意义的。

运算符重载:对已有的运算符赋予多重含义,使同一运算符作用于不同类型的数据时导致不同类型的行为。

容器分为两大类。

顺序容器

顺序容器有三种:可变长动态数组vector、双端队列deque、双向链表list。

它们之所以被称为顺序容器,是因为元素在容器中的位置与元素的值无关,即容器不是排序的。将元素插入容器时,指定在什么位置插入,元素就会位于什么位置。

关联容器

关联容器有4种:set、multiset、map、multimap。关联容器内的元素是排序的。插入元素时,容器会按一定的排序规则把元素放到适当的位置上,因此插入元素时就不能指定位置。

默认情况下,关联容器中的元素是从小到大排序(或者按关键字从小到大排序),而且用<运算符比较元素or关键字大小。因为是排好序的,所以关联容器在查找时具有非常好的性能。

除了以上两类容器外,STL还在两类容器的基础上屏蔽一部分功能、突出或增加另一部分功能,实现了3种容器适配器:栈stack、队列queue、优先级队列priority_queue。

为称呼方便起见,后面将容器适配器和容器统称为容器。

容器都是类模板,它们实例化后就成为容器类。用容器类定义的对象称为容器对象

例如:vector<int>是一个容器类的名字,vector<int> a;就定义了一个容器对象a,a代表1个长度可变的数组,数组中的每个元素都是int型的变量。vector<double> b定义了另一个容器对象b,a和b的类型是不同的

为称呼方便起见,“容器对象”也称为“容器”。

任何两个容器对象,只要它们的类型相同,就可以用<、<=、>、>=、==、!=进行词典式的比较运算。假设a、b是两个类型相同的容器对象,那么运算符的运算规则如下:

  • a==b:若a与b中元素个数相同,且对应元素均相等,则值为true,否则为false。
  • a<b:规则类似于词典中两个单词比较大小,从头到尾依次比较每个元素,如果发生a中某元素小于b中某元素的情况,则值为true;如果没有发生a中某元素小于b中某元素的情况,但是a中元素个数小于b,值为true;其他情况下值都是false。
  • a!=b、a>b、a<=b、a>=b。

容器的成员函数

所有容器都有两个成员函数:

  • int size():返回容器对象中元素的个数。
  • bool empty():判断容器对象是否为空。

顺序容器和关联容器还有以下成员函数:

  • begin():返回指向容器中第一个元素的迭代器。
  • end():返回指向容器中最后一个元素后面的位置的迭代器。
  • rbegin():返回指向容器中最后一个元素的反向迭代器。
  • rend:返回指向容器中第一个元素前面的位置的反向迭代器。
  • erase(...):从容器中删除1个或几个元素。该函数参数较复杂,此处省略。
  • clear():从容器中删除所有元素。

迭代器:是一种对象,能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中确定的地址。
反向迭代器:是一种反向遍历容器的迭代器,即从最后一个元素到第一个元素遍历容器。反向迭代器将自增和自减的含义反过来了,即++运算访问前一个元素,–运算访问下一个元素。

如果一个容器是空的,则begin()和end()的返回值相等,rbegin()和rend()的返回值也相等。

顺序容器还有以下常用成员函数:

  • front():返回容器中第一个元素的引用。
  • back():返回容器中最后一个元素的引用。
  • push_back():在容器末尾增加新元素。
  • pop_back():删除容器末尾的元素。
  • insert(...):插入1个或多个元素。该函数参数较复杂,此处省略。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值