Contenedores STL de uso común y funciones de uso común

Escrito en el anverso: Esto es abril nuevamente. En el pasado, en esta época del año, la competencia provincial de Blue Bridge terminaba temprano. Este año, afectado por el nuevo virus de la corona, el examen de ingreso a la universidad Blue Bridge Level 4 y 6 se pospuso. Debe ser algo sin precedentes. ¡Espero que no haya nadie por venir! Debido a la postergación de Blue Bridge este año, todavía no hemos empezado la escuela y el tiempo de preparación es extremadamente largo. He estado jugando estos días, así que cálmate y ven a un blog. STL puede reducir en gran medida la cantidad de nuestro código en nuestro problema de estructura de datos de problemas de código diario. Puede resolver su clasificación, desduplicación y disposición completa con una sola función.

Tema: Uso de contenedores y funciones STL en C ++ hábilmente en la competencia de la Copa Blue Bridge

Creo que hay varios contenedores STL de uso común: cola, conjunto, vector, cadena

Hay varios algoritmos STL de uso común: funciones sort, next_permutation y prev_permutation

Tabla de contenido

Tema: Uso de contenedores y funciones STL en C ++ hábilmente en la competencia de la Copa Blue Bridge

Uno, contenedor de cola

Dos, contenedor fijo

Tres, contenedor de vectores

Contenedor de cuatro cuerdas

Cinco, función de clasificación

Orden ascendente del diccionario predeterminado

Utilice cmp para personalizar el tipo de clasificación:

Seis funciones, next_permutation y prev_permutation

 


Uno, contenedor de cola

Cola: los elementos de adentro están sujetos al primero en entrar, primero en salir. En términos generales, pones 123456 en orden. Cuando sacas, el orden sigue siendo 123456. Esto se usa ampliamente al escribir Guangsou (porque Primero atravesar hasta el punto y luego atravesar para priorizar). Puedes pensar en él como un cubo. Hoy arrojas algo en él. Lo primero que obtienes cuando lo obtienes es el primero que arrojas.

Métodos habituales de funcionamiento:

Primero debe citar el archivo de encabezado: #include <queue>

Defina una cola (entre paréntesis angulares están los tipos de elementos en la cola, puede haber muchos tipos, las estructuras también se pueden usar y se usan comúnmente): cola <int> q;

Insertar un elemento: q.push (a);

Regrese al elemento principal: q.front ();

Pop el elemento líder:  q.pop ();

Longitud de la cola de consultas:  q.size ();

Consultar si la cola está vacía (el valor de retorno es verdadero o falso de tipo bool): q.empty (); 

Consultar el elemento de cola: q.back ();

Nota:

(1) Debe ser C ++ y usar el espacio de nombres std;

(2) El archivo de encabezado debe estar entre comillas: #include <queue>

(3) Después de tomar el primer elemento del equipo, el primer elemento del equipo debe aparecer, de lo contrario, siempre lo obtendrás. La recuperación es solo el valor, y no se saca del cubo, y los elementos detrás de él tienen la oportunidad de salir.

Ejemplos:

#include <stdio.h>
#include <queue>
using namespace std; 
int main()
{
	queue<int >q;                       //定义存储类型为int的队列 
	int x;
	printf("输入五个整数:");
	for(int i = 1;i<=5;i++)
	{
		scanf("%d",&x);
		q.push(x);				        //每个x都入队 
	}
	printf("全部出队为:\n");
	while(!q.empty())			        //当q不为空时 
	{
		printf("%d ",q.front());		//输出队首元素 
		q.pop();						//弹出队首元素,队列长度减小
		printf("队列现在的大小:%d\n",q.size()); 
	}
	return 0;
}

Prueba de funcionamiento:

Dos, contenedor fijo

El conjunto tiene una característica, los elementos en él solo aparecen una vez, es decir, los elementos que ingresaste no se repetirán. Si quieres colocar la repetición, no la colocará por ti, entonces esta característica se puede usar de manera efectiva Quitar el peso. Además, los elementos que entran en el conjunto se ordenan automáticamente en un diccionario. Este recorrido de conjunto utiliza iteradores, que apuntan a elementos internos.

Métodos habituales de funcionamiento:

Devuelve el número de elementos de un valor determinado: count ();

Si la colección está vacía, devuelve verdadero: vacío ();

Devuelve un iterador al último elemento: end ();

Devuelve un iterador que apunta al primer elemento: begin ();

Eliminar elementos de la colección: erase ();

Devuelve un iterador que apunta al elemento encontrado: find ();

Insertar elementos en la colección: insertar ();

El número de elementos de la colección: tamaño ();

Ejemplos:

#include <stdio.h>
#include <set>
using namespace std; 
int main()
{
	set<int >s;                 //定义存储类型为int的set
	int x;

	printf("输入五个整数:");
	for(int i = 1;i<=5;i++)
	{
		scanf("%d",&x);
		s.insert(x);				//每个x放入set容器 
	}
	if (s.find(3)!=s.end())                //查找元素3 
	    printf("Y\n"); 
	else                 
	    printf("N\n"); 
	s.erase(3);						//删除元素3 
	if (s.find(3)!=s.end())   				//再次查找元素3 
	    printf("Y\n"); 		
	else                 
	    printf("N\n"); 
	printf("%d\n",s.size()); 			//容器大小 
	printf("遍历set容器:\n");
	for (set<int>::iterator it = s.begin(); it != s.end(); it++)    //迭代器遍历容器 
	{
	printf("%d",*it); 	
	}
	return 0;
}

 

Prueba de funcionamiento:

Tres, contenedor de vectores

De manera similar al uso de matrices, puede usar directamente subíndices para obtener valores, ¡pero no puede usar subíndices para asignar valores! ! ! La característica es el uso de funciones relacionadas para calcular el tamaño de la matriz y si está vacía

Operaciones habituales:

Definir contenedor v:

vector <T> v1; // vevtor guarda objetos de tipo T. La construcción predeterminada v1 está vacía.
vector <T> v2 (v1); // v2 es una copia de v1, los tipos de elementos de v1 y v2 deben ser el mismo
vector <T> v3 (n, i); // v3 contiene n elementos con valor i
vector < T> v4 (n); // v4 contiene n copias del elemento inicializado, el valor del elemento predeterminado es 0

Ponga x en el contenedor: push_back (x);    

Tamaño del contenedor: tamaño ();

El contenedor está vacío: vacío ();

Ejemplos:

#include <stdio.h>
#include <vector>
using namespace std; 
int main()
{
	vector<int >v;                 //定义存储类型为int的v
	int x;

	printf("输入五个整数:");
	for(int i = 1;i<=5;i++)
	{
		scanf("%d",&x);
		v.push_back(x);				//每个x放入v容器 
	}
	for(int i=0;i<v.size();i++)    //遍历v的大小 
	{
		printf("%d\n",v[i]);
	}
	
	return 0;
}

Prueba de funcionamiento:

Contenedor de cuatro cuerdas

Similar a la matriz de caracteres pero mejor de usar, puede sumar y restar directamente o usar funciones relacionadas

Operaciones habituales:

Definir el contenedor s:
     cadena s1; // inicializar la cadena, s1 es
     cadena vacía s2 = s1 ;? // copiar inicialización, copiar s1 a s2
     cadena s3 = "prueba"; // inicialización directa, s3 es "prueba"
     cadena s4 (10, 'a'); // s4 = "aaaaaaaaaa"
     cadena s6 ("prueba"); // Empalme de
cadena de inicialización directa: suma y resta directa: s + = "xxxx"; s + = s1;
búsqueda de cadena: encontrar ("te");
reemplazo de posición 0-2: reemplazar (0, 2, "tt");
comparar s1, s2: s1.compare (s2)
tomar 1-3 subcadena de posición: substr (1, 3);
insertar Antes de la posición 3: inserte (3, "tt");
borre los caracteres en la posición 0-2: borre (0, 2);

Ejemplos:

#include <stdio.h>
#include <iostream>
#include <string>
using namespace std; 
int main()
{
	string s = "0123456";               //定义s 
	string s2 = "789";					//定义s2 
	cout<<s.find("34")<<endl;			//在s查找"34" 
	cout<<s.compare(s2)<<endl;			//比较s和s2 
	s.replace(0, 2, "***");//替换 
	cout<<s<<endl;
	string s3 = s.substr(1, 3);//取子串 
	cout<<s3<<endl;
	s.insert(5, "---");//插入 
	cout<<s<<endl;
	s.erase(0, 4);//删除 
	cout<<s<<endl;
	s+=s2;//叠加 
	cout<<s<<endl;
	return 0;
}

Prueba de funcionamiento:

 

Cinco, la función de clasificación en <algorithm>

Orden ascendente del diccionario predeterminado

Función de clasificación, clasificación ascendente predeterminada, complejidad de tiempo n * lg (n) , pertenece a la clasificación rápida optimizada

Instrucciones:

Clasifique un [0] a un [9] en orden ascendente: sort (a, a + 10);

Ejemplos:

#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	int a[110] = {1,3,5,8,7,4,1,2,3,6,9,8,0};
	sort(a,a+10);
	for(int i=0;i<13;i++)
		cout<<a[i]<<" ";
	return 0;
} 

Prueba de funcionamiento:

Utilice cmp para personalizar el tipo de clasificación:

La clasificación ascendente simple no puede satisfacer las necesidades de todos, por lo que puede reescribir la función de paso de parámetros cmp como los tres parámetros de la clasificación de palabras para personalizar el método de clasificación Hay muchas formas de escribir funciones, como la clasificación de estructuras. Puede utilizar un determinado elemento de la estructura para ordenar, etc.

Ejemplos:

#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
bool cmp1(int a,int b)//传参为排序数据类型
{
    return a>b;//降序排列(你需要的排序规则) 
}
int main()
{
	int a[110] = {1,3,5,8,7,4,1,2,3,6,9,8,0};
	sort(a,a+10,cmp1);
	for(int i=0;i<13;i++)
		cout<<a[i]<<" ";
	return 0;
} 

Resultados de la prueba:

Seis funciones next_permutation y prev_permutation en <algorithm>

Dos funciones de permutación completas, la siguiente es la siguiente permutación, prev es la anterior y realizará la permutación lexicográfica de acuerdo con sus parámetros, por lo que

Nota: Antes de usar esta función, debe asegurarse de que los datos que le pasa sean monótonos (puede ordenar ()), de lo contrario, ¡estarán incompletos! ! ! !

Explicación: Por ejemplo, si pasa el parámetro "231" al siguiente, encontrará el siguiente orden en orden lexicográfico, mientras que la secuencia "123" está por encima de él, ¡y esta secuencia no se cruzará! ! !

Instrucciones:

Use do-while, coloque la función en el while, coloque la instrucción de procesamiento en el do, la secuencia ordenada todavía existe en la matriz original y luego proceda a la siguiente disposición del diccionario, debe prestar atención a que no puede realizar elementos de matriz en do La asignación y otras operaciones solo pueden tomar valores, ¡porque la asignación afectará a la siguiente fila completa! ! ! !

Ejemplos:

#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
	char a[110] = "123";
	do
	{
		for(int i =0;i<6;i++)
			printf("%c ",a[i]);
		printf("\n");
		
	}
	while(next_permutation(a,a+3));
	return 0;
} 

 

Prueba de funcionamiento:

 

 

 

En general, el uso de estos contenedores puede reducir la cantidad de nuestro código. Hay muchos usos y muchas precauciones. Por el momento, solo entiendo este punto. Solo puedo compartir este punto. Aprenderé sobre otros más adelante y volveré. Cualquier intercambio de experiencias u otros comentarios de bienvenida, o Q me 2905257286

 

 

Supongo que te gusta

Origin blog.csdn.net/qq_41170600/article/details/105455961
Recomendado
Clasificación