concatena.cpp
// $Id$
/*
COMIENZO DE DESCRIPCION
Escriba procedimientos para concatenanar:
a) dos listas {\tt L1} y {\tt L2} usando {\tt insert};
b) un vector {\tt VL} de {\tt n} listas usando {\tt insert};
c) una lista {\tt LL} de {\tt n} sublistas usando {\tt insert}
``b\'asico'';
d) una lista {\tt LL} de {\tt n} sublistas usando una opci\'on
de {\tt insert};
e) una lista {\tt LL} de {\tt n} sublistas usando {\tt splice}.
keywords: lista
FIN DE DESCRIPCION */
// -----------------------------------------------------------------
#include <iostream>
#include "./util.h"
using namespace std ;
//--------------------------------------------------------------------
// concatenana dos listas "L1" y "L2" usando "insert"
template <typename t>
void concat_insert_2l (list<t> &L1,list<t> &L2,list<t> &L){
L.clear();
L.insert(L.end(),L1.begin(),L1.end());
L.insert(L.end(),L2.begin(),L2.end());
}
//--------------------------------------------------------------------
// concatenana el vector"VL" de "n" listas usando "insert"
template <typename t>
void concat_insert_vl (vector< list<t> > &VL,list<t> &L) {
typename list<t>::iterator q,z;
int n;
L.clear();
n=VL.size();
for (int i=0;i<n;i++) {
q=VL[i].begin();
z=VL[i].end();
while (q!= z) L.insert(L.end(),*q++);
} // end while
}
//--------------------------------------------------------------------
// concatenana una lista LL de "n" sublistas usando insert "basico"
template <typename t>
void concat_inserb_ll(list< list<t> > &LL,list<t> &L) {
typename list< list<t> >::iterator p,y;
typename list<t>::iterator q,z;
L.clear(); // re-inicializa nueva lista
p=LL.begin(); // iterador de la lista
y=LL.end(); // fin de la lista
while (p!=y) { // recorre lista
q=(*p).begin(); // *p recorre sublista
z=(*p).end(); // *z es fin de sublista
while (q!=z) L.insert(L.end(),*q++);// inserta la sublista actual
p++; // avanza a la sgte sublista
} // end while
}
//--------------------------------------------------------------------
// concatenana lista LL de "n" sublistas usando una opcion de insert
template <typename t>
void concat_interv_ll(list< list<t> > &LL,list<t> &L) {
typename list< list<t> >::iterator p;
L.clear();
for (p=LL.begin();p!=LL.end();p++) {
L.insert(L.end(),(*p).begin(),(*p).end());
} // end i
}
//--------------------------------------------------------------------
// concatenana la lista "LL" de "n" sublistas usando "splice"
template <typename t>
void concat_splice_ll(list< list<t> > &LL,list<t> &L) {
typename list< list<t> >::iterator p;
L.clear();
for (p=LL.begin();p!=LL.end();p++) L.splice(L.end(),*p);
}
//--------------------------------------------------------------------
// llena un vector "vl" de "n" listas con listas "l_i" de longitudes
// aleatorias "n_i" y contenidos tambien aleatorios (numeros enteros)
template <typename t>
void generar_vl(vector< list <t> > &vl) {
typename list< list<t> >::iterator p;
int k,z,n;
n=vl.size();
for (int i=0;i<n;i++) {
z=irand(10);
for (int j=0;j<z;j++) {
k=irand(100);
vl[i].insert(vl[i].end(),k);
}
}
}
//--------------------------------------------------------------------
// imprime vector de listas
template <typename t>
void imprime_vl(vector< list <t> > &vl) {
typename list<t>::iterator q,z;
int n;
n=vl.size();
// imprime cada lista
for (int i=0;i<n;i++) {
cout << "lista l [" << i << "]: "; printl(vl[i]);
}
}
//--------------------------------------------------------------------
int main() {
typedef int dato;
typedef list<dato> lista;
typedef vector<lista> vecto_l;
typedef list<lista> lista_l;
int v0[]={2,4,6,8,11,13,14,-1};
int v1[]={1,3,5,7,9,27,-1};
int v2[]={2,4,6,8,42,50,-1};
int n=4; // numero de listas
vecto_l VL(n); // constructor del vector de "n" listas
lista_l LL(n); // constructor de lista de "n" sublistas
lista L1,L2,L;
cout << endl;
cout << "procedimientos para concatenanar: " << endl << endl;
cout << "dos listas L1 y L2 usando insert" << endl;
// arma lista L1
insertl(L1,v1,-1); cout << "lista L1: "; printl(L1);
// arma lista L2
insertl(L2,v2,-1); cout << "lista L2: "; printl(L2);
// tarea
concat_insert_2l(L1,L2,L);
cout << "lista concatenada L: "; printl(L);
cout << endl;
cout << "un vector de n sublistas usando insert" << endl;
generar_vl(VL); // genera random
imprime_vl(VL);
concat_insert_vl(VL,L);
cout << "lista concatenada L: ";
printl(L);
cout << endl;
cout << "una lista de n sublistas con insert basico" << endl;
generar_vl(VL); // genera random
imprime_vl(VL);
copy(VL.begin(),VL.end(),LL.begin());
concat_inserb_ll(LL,L);
cout << "lista concatenada L: ";
printl(L);
cout << endl;
cout << "una lista de n sublistas con intervalo en insert" << endl;
generar_vl(VL); // genera random
imprime_vl(VL);
copy(VL.begin(),VL.end(),LL.begin());
concat_interv_ll(LL,L);
cout << "lista concatenada L: ";
printl(L);
cout << endl;
cout << "una lista de n listas usando splice" << endl;
generar_vl(VL); // genera random
imprime_vl(VL);
copy(VL.begin(),VL.end(),LL.begin());
concat_splice_ll(LL,L);
cout << "lista concatenada L: ";
printl(L);
cout << endl;
return 0;
}
// -----------------------------------------------------------------
Generated by GNU Enscript 1.6.6.