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;
} 

6. sort()