Descripción general del uso del algoritmo común de la biblioteca de plantillas estándar de C ++

Se proporcionan muchos algoritmos en el algoritmo, pero cuando hay funciones miembro de contenedor y funciones globales (algoritmos) al mismo tiempo, se da prioridad al uso de funciones miembro con el mismo nombre. Si no hay funciones miembro con el mismo nombre, se consideran estos algoritmos.

1.para_cada (transversal)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void myfunc(int c)
{
	cout << c << endl;
}

class A
{
public:
	void operator()(int c)
	{
		cout << c << endl;
	}
};
int main()
{
	vector<int> vec = { 5,4,3,1,2 };

	//第一种调用方法,第三个参数传入一个函数
	for_each(vec.begin(), vec.end(), myfunc);


	//第二种调用方法,第三个参数传入一个仿函数
	for_each(vec.begin(), vec.end(), A());

	//第三种调用方法,第三个参数传入一个lambda表达式
	for_each(vec.begin(), vec.end(), [](int c) { cout<<c<<endl; });

	return 0;
}

Blog de referencia: función de imitación de    C ++ Expresión lambda de C ++

2 encontrar

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
	vector<int> vec = { 5,4,3,1,2 };

	vector<int>::iterator finditer = find(vec.begin(), vec.end(), 400); //判断是否等于find的第二个参数,等于就没找到,不等于就找到了
	
	if (finditer != vec.end())
	{
		cout << "找到了" << endl;
	}
	else
	{
		cout << "没找到" << endl;
	}

	return 0;
}

3 find_if

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
	vector<int> vec = { 5,4,3,1,2 };

	vector<int>::iterator finditer = find_if(vec.begin(), vec.end(), [](int c)
	{
		if (c < 3)
			return true;
		return false;
	}); 
	
	if (finditer != vec.end())
	{
		cout << "找到了:" <<*finditer<< endl;
	}
	else
	{
		cout << "没找到" << endl;
	}

	return 0;
}

4 clasificaciones (solo admite contenedores que contienen iteradores de acceso aleatorio, como vector)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;


bool myfunc(int i, int j)
{
	if (i < j)
		return true;
	return false;
}

int main()
{
	vector<int> vec = { 5,4,3,1,2 };
	sort(vec.begin(), vec.end(), myfunc);

	for_each(vec.begin(), vec.end(), [](int c) {cout << c << endl; });

	return 0;
}

 

5 Suplemento

Se proporcionan muchos algoritmos en el algoritmo, pero cuando hay funciones miembro de contenedor y funciones globales (algoritmos) al mismo tiempo, se da prioridad al uso de funciones miembro con el mismo nombre. Si no hay funciones miembro con el mismo nombre, se consideran estos algoritmos.

123 artículos originales publicados · 31 elogiados · 90,000 vistas +

Supongo que te gusta

Origin blog.csdn.net/qq_40794602/article/details/103082621
Recomendado
Clasificación