1. Introdução aos iteradores
Ponteiros podem ser usados para percorrer estruturas de dados com espaço de armazenamento contínuo, mas para espaços de armazenamento não contíguos, você precisa encontrar uma classe que atue como um ponteiro para percorrer estruturas de dados não arranjadas . Portanto, introduzimos o conceito de iterador.
Iterator (Iterator) é um tipo de dados que verifica os elementos no contêiner e percorre os elementos. Iteradores são uma generalização de ponteiros que permitem aos programadores lidar com diferentes estruturas de dados (contêineres) da mesma maneira.
1. Arquivo de cabeçalho
Todos os contêineres têm seus próprios tipos de iterador, portanto, quando você usa iteradores de contêiner genéricos, não precisa incluir um arquivo de cabeçalho especial. No entanto, existem vários iteradores especiais, como iteradores reversos, definidos em <iterator>.
2 tipos de iteradores
Os iteradores são divididos em cinco tipos, a saber: Input iterator (Input iterator), output iterator (Output iterator), forward iterator (Forward iterator), iterador bidirecional (Bidirectional iterator), iterador de acesso aleatório (Random access iterator).
Em segundo lugar, o uso de iteradores de contêiner
Aqui estão alguns exemplos para ilustrar o uso de cada contêiner:
1、vetor
#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, portanto
#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
*/