STL 算法部分 原创入门教程,要详细资料请百度
STL算法部分
库为 Algorithm 算法库 Functional函数式编程 Numeric 基础性的数值算法
一一:find 查找类有13个函数,详情请百度。
使用方法,s.find(“a”);s就是一个数据类型,比方说set 集合,就是在一个集合中找到第一个和a一样的 字符,然后返回他的迭代器,
迭代器可以大概理解为指针。
用法是 queue<int> : : iterator it;
因为大多数函数返回的都是it 类型的指针,所有必须认真掌握。
二:排序和通用算法
Sort 排序类有 14个函数。详情请百度。
Sort (a,a+n) 这样直接在这个范围内正排。
或者自己写cmp(比较)函数
Sort(a,a+n,cmp);
关于cmp怎么写,这个比较麻烦,
Reverse 对指定范围内元素重新反序排序,。
1对一维数组排序
超简单写法
Bool cmp(int a,int b)
{return a>b;}降序排序, 后面是完整写法
如果是qsort的话得这样写
qsort(a,n,sizeof(a[0]),cmp);
int cmp(const void *a,const void *b)// const 不可改变的 a所指向的值 void 是多态。
{ return *(int *)a-*(int *)b; } // 由小到大 (int *)是强制类型转换为int的指针类型,
int cmp(const void *a,const void *b) // 前面的* 好取指针的值来减虽然麻烦,
{ return *(int *)b-*(int *)a; } //
由大到小 不过是为了通用性而设计的,
.特例排序double型(只能这样来写):
Double in 【1000】;
int cmp(const void *a,const void *b)
{
return (*(double*)a)>(*(double*)b) ? 1:-1;
//返回值的问题,cmp是int型的,避免double
返 回小数而被丢失,
}
三:删除和替换类型算法 十五个。
Copy 复制序列
Remove 删除指定范围内,等于指定元素的元素。
Replace 替换 指定范围替换元素
Swap 交换,存储在两个对象的值。
Unique 清除指定范围内重复元素。
四:排列组合算法 2个
Next_permutatiom 将当前范围重新排序为全排列,获得的是下一个序列
Prevp_ermutatiom 同上,获得的是上一个序列
next_permutation(a,a+m) 全排列的下一个
样例是
#include<iostream>
#include<string>
#include<algorithm>
using namespace std ;
int main()
{
int n,a[9]={1,2,3,4,5,6,7,8,9};
cin >> n;
while(n--)
{ int m;
cin >> m;//获取对多少个数全排列
do
{
for(int i = 0; i < m; i++ )
cout << a[i]; //输出一行
cout<<endl;
}
while(next_permutation(a,a+m));获取下一个全排列的序列。
}
return 0;
}
五:算术算法4个
Accumulate 对迭代器标示的序列段 算和。
Adjacent_difference 创建新的序列 ,新序列中每一个新值代表当前元素和上一个元素的差。
这个知道就好,没必要深入学习。
六 生成和异变算法,6个
这个我也不懂,和填充元素有关系。
七,关系算法,8个(比较重要)
Max min 这个返回大的和小的。
Max_element min_element 返回序列中最大和最小的。返回值是迭代器。
Equal 判断在标志范围内是否相等,返回值是true
Includes 判断第一个指定范围内的元素是否都被第二个范围包括
Mismatch 并行比较两个序列指出第一个不匹配的位置。返回值是一对迭代器。
八:集合算法4个
Set_union 构造一个有序序列,包含两个序列中所有的不重复元素。
Set_intersection构造一个有序序列,找出相交的集合部分元素
Set_difference 构造一个有序序列,找出第一个存在,第二个不存在的。
Set_symmetric_difference 构造一个有序序列, 去两个序列的对称差集,就是并集-交集
九:堆算法4个
不懂。自己查查看吧。