首页 > 代码库 > 容器库概述

容器库概述

容器类型上的操作形成了一种层次:

  • 某些操作是所有容器类型都提供的,如下表所示

一般来说,每个容器都定义在一个头文件中,文件名与类型名相同。即,deque定义在头文件deque中,list定义在头文件list中,以此类推。容器均定义为模板类。例如对于vector,我们必须提供额外信息来生成特定的容器类型。对大多数,但不是所有容器,我们还需要额外提供元素类型信息:

list<Sales_data> //保存Sales_data对象的list

deque<double> //保存double的deque

 

对容器可以保存的元素类型的限制

顺序容器几乎可以保存任意类型的元素。特别是,我们可以定义一个容器,其元素的类型是另一个容器。这种容器的定义与任何其他容器类型完全一样:在尖括号中指定元素类型(此种情况下,是另一种容器类型):

vector<vector<string>> lines; //vector的vector

此处lines是一个vector,其元素类型是string的vector

 

容器操作

类型别名

iterator          此容器类型的迭代器类型

const_iterator          可以读取元素,但不能修改元素的迭代器类型

size_type         无符号整数类型,足够保存此种容器类型最大可能容器的大小

 

difference_type      带符号整数类型,足够保存两个迭代器之间的距离

value_type        元素类型

reference          元素的左值类型,与value_type&含义相同

const_reference       元素的const左值类型(即,const value_type&)

 

构造函数

C c;                               默认构造函数,构造空容器

C c1(c2);         构造c2的拷贝c1

C c(b,e)           构造c,将迭代器b和e指定的范围内的元素拷贝到c(array不支持)

 

C c{a,b,c...};       列表初始化

 

赋值与swap

c1=c2            将c1中的元素替换为c2中元素

c1={a,b,c....}       将c1中的元素替换为列表中元素(不适用array)

a.swap(b)        交换a和b

swap(a,b)

 

大小

c.size()           c中元素的数目(不支持forward_list)

c.max_size()          c可保存的最大元素数目

c.empty()          若c中存储了元素,返回false,否则返回true

 

添加/删除元素(不适用array)

注:在不同容器中,这些操作的接口都不同

c.insert(args)         将args中的元素拷贝进c

c.emplace(inits)       使用inits构造c中的一个元素

c.erase(args)        删除args指定的元素

c.clear()            删除c中的所有元素,返回void

 

关系运算符

==,!=         所有容器都支持相等(不相等)操作

<,<=,>,>=        关系运算符(无序关联容器不支持)

 

获取迭代器

c.begin(),c.end()        返回指向c的首元素和尾元素之后位置的迭代器

c.cbegin(),c.cend()     返回const _iterator

 

反向容器的额外成员(不支持forward_list)

reverse_iterator      按逆序寻址元素的迭代器

const_reverse_iterator  不能修改元素的逆序迭代器

c.rbegin(),c.rend()    返回指向c的尾元素和首元素之前位置的迭代器

c.crbegin(),c.crend()   返回const_reverse_iterator