STL标准模板库
STL组件包括:容器containers, 迭代器iterators, 仿函数functors, 算法algorithms
容器containers用来管理对象的集合
迭代器iterators用来在对象的群集中遍历所有元素,这个群集或许是容器也或许是容器的一部分
算法algorithms用来处理群集内的元素,搜索,排序,修改,使用元素
容器分两大类:序列式容器与关联式容器
STL提供了三个定义好的序列式容器,vector, deque, list
STL提供了四个关联容器,set, multiset, map, multimap
STL提供了三个容器配接器:stacks, queues, priority queues
verctor容器特点,利用索引直接存取任何一个元素,在尾部插入元素或移除元素均非常快速,头文件<verctor>
#include <iostream>
#include <verctor>
using namespace std;
int main(){
verctor<int> coll;
for (i = 1; i <= 6; ++i){
coll.push_back(i);
}
for (i = 0; i < coll.size(); ++i){
cout << coll[i] << " ";
}
cout << endl;
}
deque容器特点,在头部或尾部安插元素都非常快速,头文件<deque>
#include <iostream>
#include <deque>
using namespace std;
int main(){
deque<float> coll;
for (int i = 1; i <= 6; ++i){
coll.push_front(i * 1.1);
}
for (int i = 0; i< coll.size(); ++i){
cout << coll[i] << " ";
}
cout << endl;
}
因为使用在头部安插元素,所以输出结果为 6.6 5.5 4.4 3.3 2.2 1.1
list双向链表,在中间安插元素非常快速,头文件<list>
#include <iostream>
#include <list>
using namespace std;
int main(){
list<char> coll;
for ( char c = 'a'; c < 'z' ; ++c){
coll.push_front(c);
}
while (! coll.empty()){
cout << coll.front() << " ";
coll.pop_front();
}
cout << endl;
}
关联容器分四种
set的内部元素依据其值自动排序,每个元素值只能出现一次,不允许重复
multiset跟set相同,只不过它允许重复元素
map是键值对,每一个元素都有一个键,是排序的基础,每个键只能出现一次,不允许重复
multimap跟map相同,只不过允许重复键,可用来当作字典
容器配接器有三种
stack容器对元素采取LIFO(后进先出)的策略
queue容器采用FIFO(先进先出)的策略
priority queue容器中的元素可以拥有不同的优先级,所谓优先级就是程序员提供的排序准则,默认为operator<,升序
迭代器是可遍历容器内全部或部分元素的对象
operator* 获取当前位置上的元素
operator++ 当前元素前进至下一个元素
operator== 和 operator!= 判断两个元素是否指向同一个位置
operator= 为迭代器赋值
所有容器类别都提供有一些成员函数
begin()返回一个迭代器,第一个元素的位置
end()返回一个迭代器,最后一个元素的位置
#include <iostream>
#include <list>
using namespace std;
int main(){
list<char> coll;
if ( char c = 'a'; c < 'z' ; ++c){
coll.push_back(c);
}
list<char>::const_ierator pos;
for (pos = coll.begin(); pos != coll.end(); ++pos){
cout << *pos << " ";
}
cout << endl;
}
任何一种容器都定义有两种迭代器
ierator为读/写模式
const_ierator为只读模式