Análisis de código fuente STL: comprensión conceptual de iteradores y pruebas de código.

Propósito: Comprender el código fuente de STL
El motivo de los iteradores proviene de un patrón de diseño. Proporciona un método que permite a los usuarios acceder a los datos internos uno por uno, independientemente de la estructura de los datos internos (árbol, lineal, matriz, gráfico, etc.). Es diferente del acceso de la estructura de datos, y accede a los datos completos de manera uniforme uno por uno.
En STL, los iteradores no solo pueden acceder a los datos internos uno por uno, sino que también sirven como un pegamento para separar las estructuras de datos y los algoritmos. La estructura de datos y el algoritmo están separados, no solo es un código fácil de leer y escribir, sino que también está en línea con el principio de apertura y cierre en desarrollo. Si cada estructura de datos usa un algoritmo, el algoritmo se puede desarrollar en otro lugar y luego se usan iteradores para unir la estructura de datos y el algoritmo. La prueba específica es la siguiente: hay tres tipos de estructuras de datos: vector, list y deque; un tipo de algoritmo es find. El algoritmo de búsqueda se aplica a estas tres estructuras de datos. El código específico es el siguiente:

#include<vector>
#include<list>
#include<deque>
#include<algorithm>
#include<iostream>

using namespace std;

int main()
{
    
    
	const int arraysize = 7;
	int ia[arraysize] = {
    
    0,1,2,3,4,5,6};
	vector<int> ivect(ia, ia+arraysize);
	list<int> ilist(ia, ia+arraysize);
	deque<int> ideque(ia, ia+arraysize);

	vector<int>::iterator it1 = find(ivect.begin(), ivect.end(), 4);
	if(it1 == ivect.end())
	{
    
    
		cout<<"4 not found in ivect.. "<<std::endl;
	}
	else
	{
    
    
		cout << "4 found in ivect..."<<std::endl;
	}

	list<int>::iterator it2 = find(ilist.begin(), ilist.end(), 5);
	if(it2 == ilist.end())
	{
    
    
		cout << "5 not found in ilist... " << endl;
	}
	else
	{
    
    
		cout << "5 found in ilist... " << endl;
	}

	deque<int>::iterator it3 = find(ideque.begin(), ideque.end(), 6);
	if(it3 == ideque.end())
	{
    
    
		cout << "6 not found in ideque... " << endl;
	}
	else
	{
    
    
		cout << "6 found in ideque... " << endl;
	}

	return 0;
}

En el código, la función de búsqueda de la función de búsqueda se aplica a tres estructuras de datos y los resultados de la prueba son los siguientes:

inserte la descripción de la imagen aquíPuede encontrar 4,5,6. Se aplica la función de búsqueda, que también es un papel muy importante del iterador.

Comprensión: el diseño de STL es muy delicado, y el iterador también es una parte muy importante, que proporciona una habilidad para el diseño de código futuro. En el futuro, intente separar el algoritmo básico y la estructura de datos, y luego use iteradores para lograr la fusión del algoritmo y la estructura de datos.

Supongo que te gusta

Origin blog.csdn.net/weixin_43851636/article/details/122258206
Recomendado
Clasificación