**<1>序列容器遍历操作**

常用参数对照：
frist : 起点，为一个[[迭代器]]
last : 终点，为一个[[迭代器]]

[[for_each]]
功能： 遍历序列容器，将区间【fist,last）之内每一个元素传入函数fn，在函数fn内对元素进行操作；

[[find]]
功能： 返回一个迭代器，该迭代器返回等于val的范围内的第一个元素的迭代器。如果找不到这样的元素，则函数返回last迭代器。

[[find_if]]
功能： 将区间【fist,last)之内每一个元素传入一元判断式：当pred(elem) 返回true时返回第一个达成条件的元素迭代器；

[[equal]]
功能： 比较两个序列的逐个元素是否相等；

[[count]]
功能： 返回序列中等于给定值元素的个数；

**<2> 序列修改操作**
[[swap]]

函数功能：交换a和b

[[replace]]

功能： 把序列中等于old_value元素替换为 new_value；

[[replace_if]]

功能： 将区间[fist,last)之内每一个元素传入一元判断式：当pred(elem) 返回true时的元素替换成new_value；

**序列排序**
[[sort]]

函数功能：
两个重载： 第一个对first到last 升序排序
第二个在第一个基础上传入一个传入一元判断式comp为a < b则升序，否则降序

**排列函数**
[[next_permutation]]

函数功能：
求的是序列当前排列的下一个排列，当当前序列不存在下一个排列时，函数返回false，否则返回true。
注意： next_permutation() 在使用前需要对欲排列数组按升序排序，否则只能找出该序列之后的全排列数。

代码：

  #include <iostream>  
  #include <algorithm>  
  using namespace std;  
  int main()  
  {  
      int num[3]={1,2,3};  
      do  
      {  
          cout<<num[0]<<" "<<num[1]<<" "<<num[2]<<endl;  
     }while(next_permutation(num,num+3));  
     
     return 0;  
 }

输出：
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1

需要强调的是，next_permutation() 在使用前需要对欲排列数组按升序排序，否则只能找出该序列之后的全排列数。

下面的代码将展示如何使用next_permutation在接收一个数组p之后对数组p的内容进行全排列,其中n代表数组长度:

#include<iostream>
#include<cstdio> 
#include<algorithm>
using namespace std;
int main()
{
	int n,p[10]; 
	
	scanf("%d",&n);
	for(int i = 0;i < n;i ++)
	{
		scanf("%d",&p[i]);
	}
	sort(p,p+n); //事先排序以保证全排列
	do
	{
		for(int i = 0;i < n;i ++)
		{
			printf("%d ",p[i]);//对于排好序的数组，直接输出即为第一个排列
		}
		printf("\n");
	}while(next_permutation(p,p+n));
	
	return 0;
}