C ++ --- biblioteca de plantillas estándar y algoritmo STL

Biblioteca de plantillas estándar y algoritmo STL

Genérico: Es
la idea central de la biblioteca de plantillas estándar. El llamado genérico significa que el objeto está separado del tipo de datos al que pertenece el objeto.
STL es una biblioteca genérica:
todos sus componentes están compuestos por plantillas y sus elementos pueden ser de cualquier tipo.
La biblioteca estándar de C ++ consta de 6 componentes principales:
(1) Algoritmo genérico;
(2) Contenedor genérico;
(3) Iterador genérico;
(4) Objeto de función;
(5) Adaptador;
(6) Asignador;

1. Contenedor: gestiona una colección de objetos de cierto tipo;
2. Iterador: recorre la colección de objetos;
3. Algoritmo: proporciona algoritmos para procesar elementos en la colección; estándar C ++, STL está organizado en 13 archivos de encabezado,

Inserte la descripción de la imagen aquí

Uno, algoritmo STL

STL utiliza plantillas de funciones para definir más de 70 algoritmos de uso común. Los algoritmos se incluyen principalmente en, de
uso común:
1. código de clasificación
:

#include<iostream>
#include<algorithm>

using namespace std;

int main(){
    
    
	
	int a[]={
    
    2,5,8,6,8,5,55,88,8};
	int len=(sizeof(a)/sizeof(*a));
	
	sort(a,a+len);
	for(int i=0;i<len;i++){
    
    
		cout<<a[i]<<' ';
	}
	return 0;
}

Extensión (la clasificación es muy útil, la clasificación (a, a + n) es la clasificación predeterminada de pequeña a grande, también puede clasificar de grande a pequeña según sus necesidades, e incluso puede clasificar la estructura);
código:

//使用sort实现结构体排序

#include<iostream>
#include<algorithm>

using namespace std;

struct Point{
    
    
	int x;
	int y;
}p[4];

bool cmp(Point p1,Point p2){
    
    
	if(p1.x==p2.x){
    
    
		return p1.y<p2.y;
	}else{
    
    
		return p1.x<p2.x;
	}
}

int main(){
    
    
	for(int i=0;i<4;i++){
    
    
		cin>>p[i].x;
		cin>>p[i].y;
	}
	
	sort(p,p+4,cmp);
	for(int i=0;i<4;i++){
    
    
		cout<<"("<<p[i].x<<","<<p[i].y<<")"<<endl;
	}
	return 0;
} 

En segundo lugar, cuente (devuelve el número de veces que aparece la tecla desde el punto de inicio hasta el punto final)
código:

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

int main(){
    
    
	int n;
	string str("one world one dream");
	char key='e';
	n=count(str.begin(),str.end(),key);
	cout<<"key count:"<<n<<endl;
	return 0;
}

Tres, otros algoritmos
Inserte la descripción de la imagen aquíInserte la descripción de la imagen aquí

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

En segundo lugar, el contenedor

Los contenedores STL se utilizan para almacenar y contener varios tipos de datos y se implementan como plantillas de clases.
Los contenedores STL se dividen en tres categorías:
1) contenedores secuenciales;
2) contenedores asociativos;
3) adaptadores de contenedor;
1. contenedores secuenciales;
uno, vector (vector): elementos almacenados continuamente;
dos, lista (lista): por nodos Los dos de manera que se compone la lista enlazada, cada nodo contiene uno;
tres, deque: una matriz de punteros a diferentes elementos almacenados continuamente;
2.contenedor asociativo:
uno, conjunto: no puede tener los mismos elementos;
Dos, conjunto múltiple (meltiset): puede tener los mismos elementos;
tres, mapa (mapa): un conjunto compuesto por {clave, valor};
3. Adaptador de contenedor:
uno, pila (pila): primero en entrar, último en salir
, dos, cola (cola): primero en entrar, primero en salir
3. Cola de prioridad (priority_queue): la prioridad más alta está al frente;
Nota:
Inserte la descripción de la imagen aquí
Ejemplos de uso de vectores:
Inserte la descripción de la imagen aquí
código:

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

int main(){
    
    
	
	vector <int> vi;
	int a;
	while(true){
    
    
		cout<<"输入一个整数,按0停止"<<endl;
		cin>>a;
		if(a==0)break;
		vi.push_back(a); 
	}
	
	for(int i=0;i<vi.size();i++){
    
    
		cout<<vi[i]<<" ";
	}
	return 0;
} 

Cree un vector para
Inserte la descripción de la imagen aquí
acceder a los elementos en la
Inserte la descripción de la imagen aquí
inserción de vector o elimine el orden inverso y la copia de la función de
Inserte la descripción de la imagen aquí
vector:

#include<vector>
#include<iostream>
#include<algorithm>

using namespace std;

int main(){
    
    
	
	int arr[6]={
    
    1,25,25,88,11,2};
	vector<int> v1(arr,arr+6),v2;//v1的初始化
	v2.resize(6);//发配大小
	copy(v1.begin(),v1.end(),v2.begin());//复制函数
	reverse(v2.begin(),v2.end());//逆序函数
	
	for(int i=0;i<v2.size();i++){
    
    
		cout<<v2[i]<<" ";
	}
	return 0;
}

Tres, iterador

El iterador es un puntero encapsulado de alto nivel. Los usuarios pueden atravesar el contenedor o la secuencia sin preocuparse por el tipo de datos del objeto; el
iterador está en el archivo de encabezado : ,, el
proceso de recorrido del iterador :
Inserte la descripción de la imagen aquí
begin () y end () : el
Inserte la descripción de la imagen aquí
el iterador atraviesa la instancia:

#include<vector>
#include<iostream>
#include<algorithm>

using namespace std;

int main(){
    
    
	
	int arr[6]={
    
    1,25,25,88,11,2};
	vector<int> v1(arr,arr+6);
	for(vector<int>::iterator it=v1.begin();it!=v1.end();it++){
    
    
		cout<<*it<<' ';
	}
	return 0;
}

Ejercicio avanzado : ( Fusión ordenada de dos listas enlazadas)
input_case:

3 3
-1 22 8
9 -88 2

output_case:

-88 -1 2 8 9 22  

código:

#include<iostream>
#include<list>

using namespace std;

int main(){
    
    
	list<int> l1,l2;
	
	int len_1,len_2;//两个链表的长度
	scanf("%d %d",&len_1,&len_2);
	int num;
	for(int i=0;i<len_1;i++){
    
    
		cin>>num;
		l1.push_back(num);//加入链表
	}
	
	for(int i=0;i<len_2;i++){
    
    
		cin>>num;
		l2.push_back(num);//加入链表
	}
	l1.sort();//表1排序
	l2.sort();//表2排序
	l1.merge(l2);//l2归并到l1中
	
	for(list<int>::iterator it=l1.begin();it!=l1.end();it++){
    
    //迭代器遍历
		cout<<*it<<' ';
	}
	
	return 0;
}

Tipo de iterador:
Inserte la descripción de la imagen aquí
si diferentes contenedores admiten iteradores:
Inserte la descripción de la imagen aquí
Nota : los iteradores también se pueden asignar mediante subíndices (solo se aplica a aquellos que admiten acceso aleatorio), como vector, pero no lista

Supongo que te gusta

Origin blog.csdn.net/timelessx_x/article/details/115029005
Recomendado
Clasificación