elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Alguien que me ayude a hacer este codigo mas eficiente
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Alguien que me ayude a hacer este codigo mas eficiente  (Leído 2,489 veces)
MellaSystems

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Alguien que me ayude a hacer este codigo mas eficiente
« en: 9 Marzo 2015, 01:06 am »

en un menu para listar, borrar, buscar un nombre en la clase vector:

Código
  1. //
  2. #include <iostream>
  3. #include <string>          
  4. #include <vector>
  5.  
  6. using std::vector;
  7. using std::cout;
  8. using std::cin;
  9. using std::string;
  10. using std::endl;
  11.  
  12. class cEstudiante{
  13.        public:
  14.             string nomv;
  15.             cEstudiante(string vnomv) : nomv(vnomv){}//constructor
  16.      };
  17.  
  18. main(){
  19.             int run, i, j=0, k=0, cont, con;
  20.             string NomEst, BusNom, PosNom;
  21.             vector<cEstudiante> vEstudiante;
  22.  
  23.             int OpcMen, sigue = 1; //Variables para controlar el menu
  24.             do {
  25.             system("cls");
  26.     system (" color F0");
  27.             cout << "\n\n\t\t<<<<<<<<<<<<<<<<<<<<<<<<MENU>>>>>>>>>>>>>>>>>>>>>>>>>>\n" << endl;
  28.             cout << "\n\n 1 <**> INSERTAR DATOS" << endl;
  29.             cout << " 2 <**> BORRAR DATOS" << endl;
  30.             cout << " 3 <**> MOSTRAR DATOS" << endl;
  31.             cout << " 4 <**> BUSCAR DATOS" << endl;
  32.             cout << " 0 <**> SALIR" << endl << endl;
  33.             cout<<"\n\t   Ingrese su opci\242n: ";
  34.     while(!(std::cin>>OpcMen))
  35.             {
  36.      std::cin.clear();
  37.      std::string error;
  38.      std::cin>>error;
  39.      system("cls");
  40.              cout<<"\n\tLA OPCION INGRESADA NO EXISTE\n";
  41.      cout<<"\n\tIngrese su opci\242n nuevamente: ";
  42.              }
  43.         switch(OpcMen) {
  44.     case 1:
  45.                  system("cls");
  46.                  cout << "\n\nENTRE EL NOMBRE:\n " ;
  47.                  fflush(stdin);
  48.                  getline(cin, NomEst);
  49.                  system("cls");
  50.  
  51.                  do{
  52.                    run = vEstudiante.size();
  53.                    cont=0;                            
  54.                     for (i=0;i<run;i++){      
  55.                        cEstudiante runEstudiante = vEstudiante[i];
  56.                         if(runEstudiante.nomv == NomEst){
  57.                            cont++;
  58.                            }      //I f
  59.                        }      //for
  60.                       if(cont>0){
  61.                        j++;  
  62.                        system ("cls");
  63.                        cout << "\n\nESTE NOMBRE YA EXISTE!!!" << endl;
  64.                        cout << "\n\nFAVOR DIGITAR OTRO NOMBRE DE ESTUDIANTE DIFERENTE\n" << endl;                                          
  65.                        system("pause");
  66.                        system ("cls");
  67.                        } cont=0;
  68.                  }while(cont>0);                          
  69.  
  70.                 vEstudiante.push_back(cEstudiante(NomEst));
  71.                 if(j==1) {
  72.                 vEstudiante.erase(vEstudiante.begin()+i);
  73.                  }
  74.                 j=0;                            
  75.                 break;
  76.  
  77.     case 2:
  78.                   system ("cls");
  79.                   cout << "\nAQUIEN DESEA BORRAR :\n ";
  80.                   cin >> PosNom;
  81.                      for (i=0;i<run;i++){      //for inicio
  82.                       cEstudiante runEstudiante = vEstudiante[i];    
  83.                       if(runEstudiante.nomv == PosNom){
  84.                          k++;                    
  85.                          cout << "\n\nEL NOMBRE \n" << PosNom;
  86.                          vEstudiante.erase(vEstudiante.begin()+i);
  87.                  cout << " FUE BORRADO CON EXITO!!!\n" << endl;
  88.                           }                          
  89.                          }  //fin for
  90.                         if(k==0){
  91.                           cout << "\n ESTE NOMBRE NO EXITE  !!!\n" << endl;
  92.                          }
  93.                           k=0;
  94.                           system("pause");  
  95.                           system(" CLS");                            
  96. break;
  97.     case 3:
  98.   system ("cls");
  99.                   run = vEstudiante.size();
  100.                   cout << "\n\nNOMBRE: \n" << endl;
  101.  
  102.                     for (i=0;i<run;i++){
  103.                       cEstudiante PrintEstudiante = vEstudiante[i];
  104.                         cout<<PrintEstudiante.nomv<<"\t "<<endl;
  105.                        }
  106.                         system("pause");  
  107.                         system ("cls");
  108. break;
  109.                 case 4:
  110.                   system("cls");
  111.                   cout<<"\n\nAQUIEN DESEA BUSCAR:  ";
  112.                   fflush(stdin);
  113.                   getline(cin, BusNom);
  114.  
  115.                   run = vEstudiante.size();
  116.                   con=0;
  117.                   system("cls");              
  118.                   for (i=0;i<run;i++){      //inicio for
  119.                     cEstudiante runEstudiante = vEstudiante[i];
  120.                     if(runEstudiante.nomv == BusNom){
  121.                     cout << "\nRESUTADO: \n\n" << endl;
  122.                     cEstudiante PrintEstudiante = vEstudiante[i];
  123.                     cout << "NOMBRE  " << " POSICION\n" << endl;
  124.                     cout <<PrintEstudiante.nomv<<"\t #"<< i+1<< endl<< endl;
  125.                     con++;        
  126.                   system("pause");
  127.                     }
  128.                     }   // fin for
  129.                   system("cls");
  130.                     if(con==0) {
  131.                     cout << "\nESTE NOMBRE NO EXISTE : \n\n" << endl;
  132.                     system("pause");}
  133.                     con=0;  
  134. break;
  135.                 case 0:
  136.  sigue = 0;
  137. break;
  138.                 default:
  139.                            cout<<"\t\tLA OPCION INGRESADA NO EXISTE\n";
  140.                        system("cls");
  141. }
  142. } while(sigue);      
  143. }
  144.  
  145.  

este es mi codigo quiero hacerlo mas eficiente, controlar los nombres en mayusculas y minusculas y todo eso porfa.


En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Alguien que me ayude a hacer este codigo mas eficiente
« Respuesta #1 en: 9 Marzo 2015, 09:39 am »

¿De verdad te preocupa la eficiencia de este código?


En línea

MellaSystems

Desconectado Desconectado

Mensajes: 46



Ver Perfil
Re: Alguien que me ayude a hacer este codigo mas eficiente
« Respuesta #2 en: 10 Marzo 2015, 03:08 am »

Siii y mucho efeiron


Enviado desde mi iPhone utilizando Tapatalk
En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Alguien que me ayude a hacer este codigo mas eficiente
« Respuesta #3 en: 10 Marzo 2015, 09:10 am »

Pero vamos a ver... ¿cuánto puede tardar en ejecutarse este código? ¿Media milésima de segundo? ¿una milésima?

Vamos, a no ser que estés cargando una base de datos con 200.000.000.000 registros no creo que consigas notar diferencia alguna entre tu código y uno totalmente optimizado.

Pero tu mismo:

Los objetos pesados se pasan por referencia, no por valor.

Código
  1. cEstudiante(string vnomv) : nomv(vnomv){}

En esa línea estás creando un string temporal que, posteriormente, se usará para asignar el valor de "nomv". En tu código no vas a notar ningúna diferencia, pero es bastante más óptimo pasar los strings por referencia para evitar la creación de objetos temporales:

Código
  1. cEstudiante(const string& vnomv) : nomv(vnomv){}

No uses system

Las llamadas a "system" son muy lentas. Es mucho más eficiente programarte tu propia rutina que espere una pulsación del teclado.

Evita la copia innecesaria de objetos

Código
  1. cEstudiante runEstudiante = vEstudiante[i];

Ahí estás haciendo una copia de vEstudiante. Después de esa línea "runEstudiante" y "vEstudiante" son dos objetos independientes... estas copias consumen tiempo de ejecución y memoria.

Puedes evitar la copia usando referencias o haciendo uso de iteradores:

Código
  1. cEstudiante& runEstudiante = vEstudiante[i];

Código
  1. std::vector< cEstudiante >::iterator it, itEnd = vEstudiante.end( );
  2. for (it = vEstudiante.begin( ); it != itEnd; ++it )
  3. {
  4.  if( it->nomv == NomEst)
  5.    cont++;
  6. }

fflush es solo para buffer de salida

Código
  1. fflush(stdin);

Esa línea tienes que evitarla a toda costa. fflush, de acuerdo con el estándar, está pensado para vaciar un buffer de salida, no un buffer de entrada. Dependiendo del sistema operativo esta línea te puede dar problemas.

Y con esto ya tienes algo con lo que empezar. Aunque no esperes notar demasiada diferencia... si tu programa hiciese cálculos matemáticos intensivos todavía... pero manejar un vector de 20 o 30 objetos...
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines