Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C++ (http://www.go4expert.com/forums/cpp/)
-   -   STL: Using list and string (http://www.go4expert.com/forums/stl-using-list-string-t28416/)

david_BS 20May2012 20:13

STL: Using list and string
 
Credits: BS, OGC

A demostration of the usage of std::list and std::string to create part of a command management system for a console command interpreter.

Code:

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
//
// 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;

The functions to add, list and erase
Code:

void IngresarComando(){

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

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

        if(cmd.empty())
        {
                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);
                        break;
                }
        }

        if(cantidad==0)
                cout << "There are no commands !" << endl;
}

Main function, used for testing purposes..
Code:

int main(){

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

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

        BorrarComandos();

        VerificarComandos();

        cin.get();
        return 0;
}



All times are GMT +5.5. The time now is 21:07.