Aquí presentamos tres adaptador de iterador:
La práctica empresarial Tipo iterador
para resolver el problema del problema espacio contenedor de destino, el tamaño de la demanda de contenedores de destino aumenta.
back_inserter()
Situado en el extremo del recipiente, para vectot,deque,list
recipientes:
#include<iostream>
#include<vector>
#include<algorithm>
#include <iterator>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
Vector vec,vec_1,vec_2;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
for (auto tp : vec)
cout << tp << " ";
cout << endl;
copy(vec.begin(),vec.end(),back_inserter(vec_1));
copy(vec_1.begin(), vec_1.end(), back_inserter(vec_2));
cout << endl;
cout << "生成的序列vec_1:" << endl;
copy(vec_1.begin(), vec_1.end(), ostream_iterator<int>(cout, " "));
cout << endl << "生成的序列vec_2:" << endl;
copy(vec_2.begin(), vec_2.end(), ostream_iterator<int>(cout, " "));
return 0;
}
Aplicación de los resultados
utilizando el back_inserter()
hecho de que llamada interna push_back()
, añadir elementos al final del recipiente.
Ejemplos no cubiertos:
#include<iostream>
#include<vector>
#include<algorithm>
#include <iterator>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
Vector vec,vec_1,vec_2;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
for (auto tp : vec)
cout << tp << " ";
cout << endl;
copy(vec.begin(),vec.end(),back_inserter(vec_1));
for (int i = 0; i <= 10; i++)
vec_2.push_back(rand() % 10);
cout << "生成的序列vec_2:" << endl;
copy(vec_2.begin(), vec_2.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(vec_2.begin(), vec_2.end(), back_inserter(vec_1));
cout << "生成的序列vec_1:" << endl;
copy(vec_1.begin(), vec_1.end(), ostream_iterator<int>(cout, " "));
return 0;
}
Aplicación de los resultados
front_inserter()
Colocado en la cabecera de recipiente, por deque, list` recipiente.
#include<iostream>
#include<list>
#include<algorithm>
#include <iterator>
using namespace std;
typedef list<int> List;
typedef List::iterator Iterator;
int main()
{
List vec,vec_1,vec_2;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
for (auto tp : vec)
cout << tp << " ";
cout << endl;
copy(vec.begin(),vec.end(),back_inserter(vec_1));
for (int i = 0; i <= 10; i++)
vec_2.push_back(rand() % 10);
cout << "生成的序列vec_2:" << endl;
copy(vec_2.begin(), vec_2.end(), ostream_iterator<int>(cout, " "));
cout << endl;
copy(vec_2.begin(), vec_2.end(), front_inserter(vec_1));
cout << "生成的序列vec_1:" << endl;
copy(vec_1.begin(), vec_1.end(), ostream_iterator<int>(cout, " "));
return 0;
}
Aplicación de los resultados
Tenga en cuenta que se inserta esta operación, se inserta en el orden inverso.
inserter(container,pos)
tipo común es insertado en el contenedor pos
posición elemento de colocación, el orden de disposición de los elementos y orden de colocación consistente. Todos los recipientes que tienen esta función inserter
.
#include<iostream>
#include<list>
#include<algorithm>
#include <iterator>
using namespace std;
typedef list<int> List;
typedef List::iterator Iterator;
int main()
{
List vec,vec_1,vec_2;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
for (auto tp : vec)
cout << tp << " ";
cout << endl;
copy(vec.begin(),vec.end(),inserter(vec_1,vec_1.begin()));
cout << "生成的序列vec_1:" << endl;
copy(vec_1.begin(), vec_1.end(), ostream_iterator<int>(cout, " "));
return 0;
}
Aplicación de los resultados
El flujo de iterador
funciones como toda la palabra de la entrada estándar, hasta el final de la lectura de archivos.
#include<iostream>
#include<vector>
#include<string>
#include<algorithm>
#include <iterator>
using namespace std;
int main()
{
vector<int> vec;
copy(istream_iterator<int>(cin), istream_iterator<int>(), back_inserter(vec));
copy(vec.begin(),vec.end(),ostream_iterator<int>(cout," "));
return 0;
}
Aplicación de los resultados
istream_iterator<int>(cin)
:
función equivalente cin >>
;
istream_iterator<int>()
:
Generación de representación de "flujo de caracteres final" el repetidor, que no puede interpretarse en el sentido nada.
back_inserter(vec)
:
En el copy
caso, los datos (de cin
) la copia en el vec
buque
tipo Converse iterador
es decir, la función inversa
#include<iostream>
#include<vector>
#include<algorithm>
#include <iterator>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
Vector vec;
for(int i = 0;i <= 10;i++)
vec.push_back(rand() % 10);
cout << "生成的序列vec:" << endl;
copy(vec.begin(), vec.end(), ostream_iterator<int>(cout, " "));
cout << endl << "逆序后" << endl;
copy(vec.rbegin(), vec.rend(), ostream_iterator<int>(cout, " "));
return 0;
}
Los resultados de
los cuales rbegin()
apuntan a la original, end()
posición, rend()
punto a la original begin()
posición.