STL(Standard Template Library)标准模板库是C++语言的一部分,其中包含了一些容器类型,例如vector、list、set、map、还包括了一些算法,例如查找、排序。实际开发中用户不必自己动手写数据结构,只需要调用STL中的相应的容器便能够完成所需的功能。STL中的容器都是用模板实现的,这使得STL中的适用性更强,而不用考虑不同数据类型之间的细微差异。
1、 向量vector
Vector就象是一个数组,可以快速的随机的访问数组中的元素,与数组不同的是vector大小可以自动增长。Vector的插入和删除操作在序列的尾部进行时最为高效。由于在vector中间插入和删除元素需要移动元素,所以在vector中间插入元素是低效的。
#include "stdafx.h"
#include <vector> //vector所需要的头文件
using namespace std; //vector的定义在std命名空间
int main(int argc, char* argv[])
{
//创建一个int类型的vector,类似于一个数组
vector<int> v;
//向数组末尾添加3个元素
v.push_back(1);
v.push_back(2);
v.push_back(3);
//由于vector类似于数组,所以可以通过下标访问其元素
//size函数可以获得vector的大小----元素的个数
for (int i=0; i<v.size(); i++)
{
printf("%d/n",v[i]);
}
//删除最后一个元素
v.pop_back();
//重新遍历所有元素,此次使用vector<int>::iterator-----迭代器
vector<int>::iterator vit;
for (vit=v.begin(); vit!=v.end(); vit++)
{
printf("%d/n", *vit);
}
return 0;
}
Vector<int> v 表示创建了一个int类型的vector,相当于一个int类型的数组。使用vector的push_back方法可以向vector的尾部添加int类型的元素,这种操作是高效的。Vector类型类似于数组,可以通过下标方式对vector内的元素进行随机访问。使用size方法可以得到vector内部的元素个数。使用pop_back方法可以将vector尾部的元素删除,这个操作也是高效的。对vector的元素进行遍历,除了使用下标的方式,还可以使用vector对应的iterator(迭代器)对其进行遍历。迭代器就相当于一个指针,begin方法返回vector中的第一个元素的迭代器,而end方法返回的末尾迭代器,此迭代器不指向任何元素。
注意:vector相当于一个数组,可动态增加其大小。在操作vector时,序列尾部操作是最高效的,所以通常用vector类来模拟数据结构中的堆栈。
双端队列deque
Deque是double-ended queue的缩写,deque与vector类似,也相当于一个数组,可以通过下标快速、随机的访问,但deque在序列前后操作都是高效的。
#include <stdafx.h>
#include <deque> //deque所需头文件
using namespace std; //deque定义在std命名空间
int main(int argc, char* argv[])
{
//创建一个int类型的deque,类似一个int类型数组
deque<int> d;
//向数组末尾添加3个元素
d.push_back(1);
d.push_back(2);
d.push_back(3);
//向数组头添加3个元素
d.push_front(4);
d.push_front(5);
d.push_front(6);
//由于deque也类似数组,所以可以通过下标访问其元素
//size函数可以获得deque的大小------元素个数
for (int i=0; i<d.size(); i++)
{
printf("%d/n",d[i]);
}
//删除最后一个元素
d.pop_back();
//删除第一个元素
d.pop_front();
//重新遍历所有元素,此次使用deque<int>::iterator------迭代器
deque<int>::iterator dit;
for (dit = d.begin(); dit != d.end(); dit++)
{
printf("%d",*dit);
}
return 0;
}
从上面的代码可以看出,deque和vector在使用上几乎是一样的,只是deque带有对头序列的操作的功能,使用pop_front和push_front方法,可以对deque的头部进行高效操作。
转自:http://hi.baidu.com/nowebshell/blog/item/dbc1fad2ac1e1d83a1ec9c77.html