C++中使用 algorithm 头文件,要在头文件下加一行
using namespace std
才能使用 1.max()、min() 和 abs()
- max(x,y) 返回 x 和 y 中的最大值,x 和 y 可以是整型,浮点型,字符型
- min(x,y) 返回 x 和 y 中的最小值,x 和 y 可以是整型,浮点型,字符型
- abs(x) 返回 |x|,x 可以是整型和字符型,不能是浮点型。当 x 为字符型时,输出结果为其 ASCII 码值
示例如下:
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
cout<<max(1,2)<<endl; // 2
cout<<max('a','c')<<endl; // c
cout<<min(1.0,2.0)<<endl; // 1
cout<<min(5,min(10,2))<<endl; // 2
cout<<abs('a')<<endl; // 97
cout<<abs(-4)<<endl; // 4
return 0;
}
2. swap()
- swap(x,y),交换 x 和 y 的值
示例如下:
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
int a = 10;
int b = 20;
swap(a,b);
cout<<a<<" "<<b<<endl; // 20 10
return 0;
}
3. reverse()
- reverse(first,last) ,将 [first,last) 范围内的元素反转
示例如下:
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
// 数组
int a[5]={10,20,30,40,50};
reverse(a,a+4); // a[0]~a[3] 反转
for(int i=0;i<5;i++)
cout<<a[i]<<" "; // 40 30 20 10 50
//字符串
string str="hello world";
reverse(str.begin(),str.end());
cout<<str; // dlrow olleh
return 0;
}
4. next_permutation()
- next_permutation(first,last),转换为全排列中的下一排列,比如有 a[] = {1,2,3},下图的向下顺序即为下一排列(比如 1 2 3 的下一排列为 1 3 2)。当排序到最大,即 3 2 1 时,下一排列为 1 2 3,同时 next_permutation(first,last) 返回 false,其余情况返回 true
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
示例如下:
#include<algorithm>
#include<iostream>
using namespace std;
int main(){
// 数组
int a[5]={10,20,30,40,50};
reverse(a,a+4); // a[0]~a[3] 反转
for(int i=0;i<5;i++)
cout<<a[i]<<" "; // 40 30 20 10 50
//字符串
string str="hello world";
reverse(str.begin(),str.end());
cout<<str; // dlrow olleh
return 0;
}
输出结果:
before:1 2 3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
after:1 2 3
5. fill()
- fill(first,last,value),将 [first,last) 范围内赋值为 value
示例如下:
#include<algorithm>
#include<vector>
#include<iostream>
using namespace std;
int main(){
int a[5] = {1,2,3,4,5};
fill(a,a+3,15); // a[0]~a[2]
for(int i=0;i<5;i++)
cout<<a[i]<<" ";
string str="222222";
fill(str.begin(),str.end()-2,'4');
cout<<str;
vector< int> myvector (8); // myvector: 0 0 0 0 0 0 0 0
fill(myvector.begin(),myvector.begin()+4,5); // myvector: 5 5 5 5 0 0 0 0
fill(myvector.begin()+3,myvector.end()-2,8); // myvector: 5 5 5 8 8 8 0 0
for ( vector<int>::iterator it=myvector.begin(); it!=myvector.end(); ++it)
cout << ' ' << *it; /// 5 5 5 8 8 8 0 0
return 0;
}