c ++ STL_4 de iterador adaptador

Aquí presentamos tres adaptador de iterador:

  1. Colocación tipo iterador
  2. iterador flujo
  3. tipo iterador Reverse

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,listrecipientes:

#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
Aquí Insertar imagen Descripción
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
Aquí Insertar imagen Descripción

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
Aquí Insertar imagen Descripción
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 posposició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
Aquí Insertar imagen Descripción


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
Aquí Insertar imagen Descripción
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 copycaso, los datos (de cin) la copia en el vecbuque


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
Aquí Insertar imagen Descripción
los cuales rbegin()apuntan a la original, end()posición, rend()punto a la original begin()posición.

Publicados 222 artículos originales · ganado elogios 48 · Vistas a 20000 +

Supongo que te gusta

Origin blog.csdn.net/qq_44116998/article/details/104575055
Recomendado
Clasificación