G.2 大部分容器都有的成员(2)
temperatures参数将使得Bag被谓词为vector<int>,而typename Bag::value-type被谓词为vector<int>::value_type,进而为int。
所有的容器都还可以包含表G.2列出的成员函数或操作。其中,X是容器类型,如vector<int>;而T是存储在容器中的类型,如int。另外,a和b是类型为X的值;u是标识符;r是类型为X的非const值;rv是类型为X的非const右值,而移动操作是C++(www.cppentry.com)11新增的。
表G.2为所有容器定义的操作
|
操 作< xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /> |
描 述 |
|
X u; |
创建一个名为u的空对象 |
|
X( ) |
创建一个空对象 |
|
X(a) |
创建对象x的拷贝 |
|
X u(a) |
u是a的拷贝(复制构造函数) |
|
X u = a; |
u是a的拷贝(复制构造函数) |
|
r = a |
r等于a的值(复制赋值) |
|
X u(rv) |
u等于rv的原始值(移动构造函数) |
|
X u = rv |
u等于rv的原始值(移动构造函数) |
|
a = rv |
u等于rv的原始值(移动赋值) |
|
(&a)->~X( ) |
对a的每个元素执行析构函数 |
|
begin( ) |
返回一个指向第一个元素的迭代器 |
|
end( ) |
返回一个指向超尾的迭代器 |
|
cbegin( ) |
返回一个指向第一个元素的const迭代器 |
|
cend( ) |
返回一个指向超尾的const迭代器 |
|
size( ) |
返回元素数目 |
|
maxsize( ) |
返回容器的最大可能长度 |
|
empty( ) |
如果容器为空,则返回true |
|
swap( ) |
交换两个容器的内容 |
|
= = |
如果两个容器的长度相同、包含的元素相同且
元素排列的顺序相同,则返回true |
|
! = |
a!=b返回!(a= =b) |
使用双向或随机迭代器的容器(vector、list、deque、array、set和map)是可反转的,它们提供了表G.3所示的方法。
表G.3为可反转容器定义的类型和操作
|
操 作 |
描 述 |
|
X::reverse_iterator |
指向类型T的反向迭代器 |
|
X::const_reverse_iterator |
指向类型T的const反向迭代器 |
|
a.rbegin( ) |
返回一个反向迭代器,指向a的超尾 |
|
a.rend( ) |
返回一个指向a的开头的反向迭代器 |
|
a.crbegin( ) |
返回一个const反向迭代器,指向a的超尾 |
|
a.crend( ) |
返回一个指向a的开头的const反向迭代器 |
无序集合(set)和无序映射(map)无需支持表G.4所示的可选容器操作,但其他容器必须支持。
表G.4可选的容器操作
|
操 作 |
描 述 |
|
< |
如果a按词典顺序排在b之前,则a<b返回true |
|
> |
a>b返回b<a |
|
<= |
a<=b返回!(a>b) |
|
>= |
a>=b返回!(a<b) |
容器的>运算符假设已经为值类型定义了>运算符。词典比较是一种广义的按字母顺序排序,它逐元素地比较两个容器,直到两个容器中对应的元素相同时为止。在这种情况下,元素对的顺序将决定容器的顺序。例如,如果两个容器的前10个元素都相同,但第一个容器的第11个元素比第二个容器的第11个元素小,则第一个容器将排在第二个容器之前。如果两个容器中的元素一直相同,直到其中一个容器中的元素用完,则较短的容器将排在较长的容器之前。