1、广义上分STL分为3类:容器、迭代器、算法。
(1)容器:用于容纳其他类型对象的类对象,STL提供了如向量、列表等诸多不同特性的容器;
(2)迭代器:是智能指针的一种形式,用于指向容器中或者流中的对象,并提供一定的访问方法;
(3)算法:它是STL的核心部分,提供一系列处理元素的特殊方法,如对容器中的元素进行排序、搜索等操作。
2、容器分为三大类容器:顺序容器、关联容器、容器适配器
(1)顺序容器:顺序容器用来表示线性的数据结构,如vector、list等;
(2)关联容器:关联容器用来表示的是非线性数据结构,可以快速定位容器中的元素,如map、muiltest等;
(3)容器适配器:容器适配器可以看做是顺序容器的受限制版本,用于处理特殊的线性数据结构,如stack(先进后出)、队列(先进先出)等。
3、STL中容器的分类
(1)顺序容器:vector、list以及deque;
(2)关联容器:set、multiset、map及multimap;
(3)容器适配器:stack、queue及priority_queue。
各种容器的特点如下:
4、迭代器的分类
迭代器是一种智能指针,STL中提供5种:输入迭代器(input iterator)、输出迭代器(output iterator)、向前迭代器(forward iterator)、双向迭代器(bidirectional iterator)、随机访问迭代器( random-acess iterator)。他们的特点如下:
迭代器种类 | 特点 |
输入迭代器 | 从容器中读取元素,每一步只能沿向前的方向移动一个元素 |
输出迭代器 | 用于向容器中写入元素,每一步只能沿向前的方向移动一个元素 |
向前迭代器 | 包含输入/输出迭代器的所有功能,既支持读操作,又支持写操作 |
双向迭代器 | 包含了向前迭代器的所有功能,还有向后移动的能力,每一步都可以自由选择先前还是向后移动 |
随机访问迭代器 | 包含了双向迭代器的所有功能,具有按任意顺序访问任意元素的能力,可以向前或者向后跳过任意多个元素 |
5、算法的分类
STL中算法分为3类:非修改性算法、修改性算法以及排序、合并和相关操作,各种算法的特点如下:
算法种类 | 特点 |
非修改性算法 | 不改变容器中的内容 |
修改性算法 | 通过插入、删除、重排等改变容器中包含的元素 |
排序、合并和相关操作 | 改变容器中序列的顺序 |
6、实例:(1)定义vector容器,并用不同的方式进行访问
/*********************************************
时间:2016年10月12日10:03:27
功能:创建vector容器类,并用多钟方式访问
**********************************************/
#include <iostream>
#include <vector> //包含vector的头文件
#include <time.h>
using namespace std;
void main()
{
int ia[] = {1,3,5,7,9,11};
vector<int> intvec(ia,ia+sizeof(ia)/sizeof(ia[0])); //创建容器并初始化大小
cout<<"利用下标运算符遍历容器元素:"<<endl;
for(int i = 0;i<intvec.size();i++)
{
cout<<intvec[i]<<" ";
}
cout<<endl;
cout<<"利用迭代器遍历容器元素:"<<endl;
vector<int>::iterator it; //定义迭代器
for(it = intvec.begin();it != intvec.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
cout<<"利用迭代器函数随机访问容器元素:"<<endl;
srand(time(0));
int pos = rand()%6;
cout<<"at("<<pos<<")="<<intvec.at(pos)<<endl; //利用函数访问特定元素
pos = rand()%6;
cout<<"*(begin()+"<<pos<<")="<<*(intvec.begin()+pos)<<endl;
}
运行结果如下:
(2)学会使用一些基本的容器操作函数和迭代器操作函数
/****************************************************
时间:2016年10月12日10:48:32
功能:定义vector类的容器,并熟悉一些基本的容器类操作函数
定义迭代器,并熟悉一些基本的迭代器操作函数
*****************************************************/
#include <iostream>
#include <vector>
using namespace std;
void display(vector<int> &vec)
{
vector<int>::iterator it; //创建迭代器对象
for(it = vec.begin();it != vec.end();it++)
{
cout<<*it<<" ";
}
cout<<endl;
}
void main()
{
vector<int> vec; //定义一个空的容器
for(int i=0;i<3;i++) //指定要插入的元素个数个值
{
int e;
cin>>e; //输入要插入的元素
vec.push_back(e); //在容器尾插入元素
}
display(vec); //打印插入的元素
vec.resize(5); //更改容器大小
display(vec); //打印插入的元素
vec.at(4) = 15; //在第5个元素的位置插入15
display(vec);
vec.pop_back(); //删除最后一个元素
display(vec);
vec.erase(vec.begin()+1); //删除第三个元素
display(vec);
}
运行结果如下: