C++ 对模板(Template)支持得很好,STL 就是借助模板把常用的数据结构及其算法都实现了一遍,并且做到了数据结构和算法的分离。
STL封装了很多实用的容器,省时省力,能够让你将更多心思放到解决问题的步骤上,而非费力去实现数据结构诸多细节上。
几个基本概念:
可以把它理解为存放数据的地方,常用的一些容器有 链表(list) 栈(stack) 动态数组 (vector) 双端队列(deque) 队,列(queue) 映射(map)
可以把它理解为指针类型,STL中的许多函数需要用到它们作为参数
它们通常需要与容器和游标配合使用,使用它们,你可以方便地对容器中的数据进行各种常见的操作,如排序操作,寻找最大元素的操作等。
大致有下面6个步骤:
1.添加相应的头文件(如 #include <list> )( 注意,没有 .h )
2.添加std命名空间(用 using namespace std; )
3.赋予模板具体的使用类型(如 typedef list<string> LISTSTR; )
4.实例化模板(如 LISTSTR test; )
5.实例化游标(如 LISTSTR::iterator i; )
6.通过迭代器对象访问模板对象,例如
// 逐个输出链表test中的元素
for ( i = test.begin(); i != test.end(); ++i )
cout << *i << " ";
赋值
容器为空则返回非0值
删除指定位置或指定范围内的元素
从容器头部插入元素
从容器尾部插入元素
删除第一个元素
删除最后一个元素
返回最后一个元素的引用
返回第一个元素的引用
返回指向第一个元素的游标 (与迭代器配合使用)
返回指向最后一个元素的后一个位置的游标 (最后1个元素再加1) (与迭代器配合使用)
求全排列,返回该序列之后的全排序序列。
int num[3]={1,2,3};
do
{
cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;
}while(next_permutation(num,num+3));
//对num到num+3之间[0,3)的元素全排列。
当我们想对一个容器的值进行填充时,我们就可以使用fill()函数。
int array[8];
fill (array,array+4,5); // myvector: 5 5 5 5 0 0 0 0
fill (array+3,array+6,8); // myvector: 5 5 5 8 8 8 0 0
## sort()