1. Introducción a los iteradores
Los punteros se pueden usar para atravesar estructuras de datos con espacio de almacenamiento continuo, pero para espacios de almacenamiento no contiguos, debe encontrar una clase que actúe como un puntero para atravesar estructuras de datos que no sean matrices . Por lo tanto, introducimos el concepto de iterador.
Iterador (Iterator) es un tipo de datos que verifica los elementos en el contenedor y atraviesa los elementos. Los iteradores son una generalización de punteros que permiten a los programadores manejar diferentes estructuras de datos (contenedores) de la misma manera.
1. Archivo de encabezado
Todos los contenedores tienen sus propios tipos de iteradores, por lo que cuando usa iteradores de contenedores genéricos, no necesita incluir un archivo de encabezado especial. Sin embargo, hay varios iteradores especiales, como los iteradores inversos, definidos en <iterador>.
2 tipos de iteradores
Hay cinco tipos de iteradores, a saber: iterador de entrada, iterador de salida, iterador directo, iterador bidireccional, iterador de acceso aleatorio (iterador de acceso aleatorio).
En segundo lugar, el uso de iteradores de contenedores.
Aquí hay algunos ejemplos para ilustrar el uso de cada contenedor:
1, vector
#include <iostream>
#include <vector>
using namespace std;
int main(int argc, char* argv[])
{
// Create and populate the vector
vector<int> vecTemp;
for (int i = 0; i<6; i++)
{
vecTemp.push_back(i);
}
// Display contents of vector
cout <<"Original deque: ";
vector<int>::iterator it;
for (it = vecTemp.begin(); it!=vecTemp.end(); it++)
{
cout <<*it <<" ";
}
return 0;
}
C++资料领取进裙:580475042
/*
输出结果:
Original deque: 0 1 2 3 4 5
*/
2, por lo tanto
#include <iostream>
#include <deque>
using namespace std;
int main(int argc, char* argv[])
{
// Create and populate the deque
deque<int> dequeTemp;
for (int i = 0; i<6; i++)
{
dequeTemp.push_back(i);
}
// Display contents of deque
cout <<"Original deque: ";
deque<int>::iterator it;
for (it = dequeTemp.begin(); it != dequeTemp.end(); it++)
{
cout <<*it <<" ";
}
cout <<endl;
return 0;
}
C++资料领取进裙:580475042
/*
输出结果:
Original deque: 0 1 2 3 4 5
*/
3, lista
#include <iostream>
#include <list>
using namespace std;
int main(int argc, char* argv[])
{
// Create and populate the list
list<int> listTemp;
for (int i = 0; i<6; i++)
{
listTemp.push_back(i);
}
// Display contents of list
cout << "Original list: ";
list<int>::iterator it;
for (it = listTemp.begin(); it != listTemp.end(); it++)
{
cout << *it << " ";
}
cout << endl;
// Insert five 9 into the list
list<int>::iterator itStart = listTemp.begin();
listTemp.insert(itStart,5,9);
// Display the result
cout << "Result of list: ";
for (it = listTemp.begin(); it != listTemp.end(); it++)
{
cout << *it << " ";
}
cout << endl;
return 0;
}
C++资料领取进裙:580475042
/*
输出结果:
Original list: 0 1 2 3 4 5
Result of list: 9 9 9 9 9 0 1 2 3 4 5
*/
4, conjunto
#include <iostream>
#include <set>
using namespace std;
int main(int argc, char* argv[])
{
// Create and populate the set
set<char> setTemp;
for (int i = 0; i<6; i++)
{
setTemp.insert('F'-i);
}
// Display contents of set
cout <<"Original set: ";
set<char>::iterator it;
for (it = setTemp.begin(); it != setTemp.end(); it++)
{
cout <<*it <<" ";
}
cout <<endl;
return 0;
}
C++资料领取进裙:580475042
/*
输出结果:
Original set: A B C D E F
*/
5, mapa
#include <iostream>
#include <map>
using namespace std;
typedef map<int, char> MyMap;
int main(int argc, char* argv[])
{
// Create and populate the map
MyMap mapTemp;
for (int i = 0; i<6; i++)
{
mapTemp[i] = ('F'-i);
}
// Display contents of map
cout <<"Original map: " <<endl;
MyMap::iterator it;
for (it = mapTemp.begin(); it != mapTemp.end(); it++)
{
cout << (*it).first << " --> ";
cout << (*it).second << std::endl;
}
cout <<endl;
return 0;
}
C++资料领取进裙:580475042
/*
输出结果:
Original map:
0 --> F
1 --> E
2 --> D
3 --> C
4 --> B
5 --> A
*/