Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: david_BS en 9 Mayo 2012, 00:39 am



Título: STL: Uso de list y string
Publicado por: david_BS en 9 Mayo 2012, 00:39 am
Esto es una muestra de código que demuestra como se usa una list para guardar elementos de tipo struct 'ScheduledCommand', que hace referencia a comandos que se van guardando y ejecutándose, dado que este código estaba aplicado a un sistema con consola de comandos. Lo que hice fue aislar el código referente al uso de list y demostrarlo con un ejemplo. Créditos para el proyecto OGC.

Descarga: http://www.mediafire.com/?pujccy7douubkgo (http://www.mediafire.com/?pujccy7douubkgo)

Código:
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// UTN FRGP TSP
// BS
// mail: david_bs@live.com
// web: Etalking.Com.Ar
// 2012
//
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#include <windows.h>
#include <stdio.h>
#include <fstream.h>
#include <list>
#include <string>

using namespace std;

struct ScheduledCommand
{
string comando;
int prioridad;
};

typedef list<ScheduledCommand> ScheduleList;
ScheduleList scheduleList;

Las funciones de agregar, listar y borrar
Código:
void IngresarComando(){

string cmd;
char comando[21];
memset(comando,0,sizeof(comando));
cout << "Ingrese un comando" << endl;
cin.getline(comando,20,'\n');
cmd.assign(comando);

// cout << const_cast<char*>(cmd.c_str()) << endl;
// system("pause");

if(cmd.empty()) // Si se ingresa una línea en blanco procede a mostrar los comandos en lista
{
list<ScheduledCommand>::iterator pos;
for(pos=scheduleList.begin();pos!=scheduleList.end();++pos)
{
printf("pri:%d -- cmd:\"%s\"\n", (*pos).prioridad, (*pos).comando.c_str() );
}
return;
}

ScheduledCommand tmp;
tmp.comando=cmd;
tmp.prioridad=1;
if(scheduleList.size()<32){
scheduleList.push_back(tmp);
}
}

void BorrarComandos(){

scheduleList.erase(scheduleList.begin(),scheduleList.end());
}

void VerificarComandos(){

cout << "\n";

int cantidad=0;
for( ScheduleList::iterator pos = scheduleList.begin(); pos != scheduleList.end(); ++pos)
{
// cantidad++;
if( (*pos).prioridad == 1 )
{
cantidad++;
cout << "Comando: " << const_cast<char*>((*pos).comando.c_str()) << endl;
scheduleList.erase(pos); // lo borra luego de verificarlo
break;
}
}

if(cantidad==0)
cout << "No hay comandos !" << endl;
}

La función main para realizar las pruebas..
Código:
int main(){

IngresarComando();
IngresarComando();
IngresarComando();

VerificarComandos();
VerificarComandos();
VerificarComandos();

BorrarComandos();

VerificarComandos();

cin.get();
return 0;
}


Título: Re: STL: Uso de list y string
Publicado por: luke92 en 12 Mayo 2012, 00:06 am
Muy bueno! :D