首页 > 代码库 > 容器库概述
容器库概述
容器类型上的操作形成了一种层次:
- 某些操作是所有容器类型都提供的,如下表所示
一般来说,每个容器都定义在一个头文件中,文件名与类型名相同。即,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 |