MiYu原创, 转帖请注明 : 转载自 ______________白白の屋
几种常用的容器: map, vector, list, queue,stack, string ( 这个字符串也算个容器 )
STL容器的共通操作
–
一. 初始化(initialization)
•
1.产生一个空容器
list<int> l; vector<int> vec; map<int,int>.......
尖括号里面可以是系统类型, 也可以是自定义类型, 表示存放在容器中的类型.
•
2.以另一个容器元素为初值完成初始化
list<int> lst;
…
vector<float> vec ( lst.begin(), lst.end() );
其他的容器都可以类似地 操作, 当然, 每一种容器都有好几个构造函数版本,
具体下面分类介绍.
•
以数组元素为初值完成初始化
int array[]={2,4,6,1345};
…
set<int> st ( array, array + sizeof(array) / sizeof(array[0]) );
与大小相关的操作(size operator)
•
size()-返回当前容器的元素数量
•
empty()-判断容器是否为空
•
max_size()-返回容器能容纳的最大元素数量
–
比较(comparison)
•
==,!=,<,<=,>,>=
•
比较操作两端的容器必须属于同一类型
•
如果两个容器内的所有元素按序相等,那么这两个容器相等
•
采用字典式顺序判断某个容器是否小于另一个容器
–
赋值(assignment)和交换(swap)
•
swap用于提高赋值操作效率
•
容器的共通操作
–
与迭代器(iterator)相关的操作
•
begin()-返回一个迭代器,指向第一个元素
•
end()-返回一个迭代器,指向最后一个元素之后
•
rbegin()-返回一个逆向迭代器,指向逆向遍历的第一个元素
•
rend()-返回一个逆向迭代器,指向逆向遍历的最后一个元素之后
–
元素操作
•
insert(pos,e)-将元素e的拷贝安插于迭代器pos所指的位置
•
erase(beg,end)-移除[beg,end]区间内的所有元素
•
clear()-移除所有元素
•
迭代器(iterator)(示例:iterator)
–
->可遍历STL容器内全部或部分元素的对象
–
->指出容器中的一个特定位置
–
->迭代器的基本操作
操作
|
效果
|
*
|
返回当前位置上的元素值。如果该元素有成员,可以通过迭代器以operator ->取用
|
++
|
将迭代器前进至下一元素
|
==和!=
|
判断两个迭代器是否指向同一位置
|
=
|
为迭代器赋值(将所指元素的位置赋值过去)
|
迭代器(iterator)
–
所有容器都提供获得迭代器的函数
操作
|
效果
|
begin()
|
返回一个迭代器,指向第一个元素
|
end()
|
返回一个迭代器,指向最后一个元素之后
|
半开区间[beg, end)的好处:
1.为遍历元素时循环的结束时机提供了简单的判断依据(只要未到达end(),循环就可以继续)
2.不必对空区间采取特殊处理(空区间的begin()就等于end())
–
所有容器都提供两种迭代器
•
container::iterator以“读/写”模式遍历元素
•
container::const_iterator以“只读”模式遍历元素
–
迭代器示例:iterator
–
迭代器分类
•
双向迭代器
–
->可以双向行进,以递增运算前进或以递减运算后退。
–
->list、set和map提供双向迭代器
•
随机存取迭代器
–
->除了具备双向迭代器的所有属性,还具备随机访问能力。
–
->可以对迭代器增加或减少一个偏移量、处理迭代器之间的
距离或者使用<和>之类的关系运算符比较两个迭代器。
–
->vector、deque和string提供随机存取迭代器