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

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Optimizar este código en C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Optimizar este código en C++  (Leído 1,464 veces)
huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Optimizar este código en C++
« en: 25 Octubre 2018, 02:50 am »

Tengo este código, el cual funciona, pero tiene un error garrafal.

Código
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <ctime>
  5.  
  6. typedef struct
  7. {
  8. int precio;
  9. int id;
  10. char name[255];
  11. char adc[512]; // caracteristicas adicionales
  12. } prod;
  13.  
  14. void addpr(prod *a);
  15. void db(prod *a);
  16.  
  17. unsigned int pos = 0;
  18. unsigned int nume = 0;
  19.  
  20. int main()
  21. {
  22. int op = 0;
  23.  
  24. // Necesitamos una estructura llamada pres y una llamada *punpress
  25. // la cual apuntara a pres.
  26. prod pres[512], *punpres; // <- creando 512 estructuras??? ineficiente!!!
  27. punpres = pres;
  28. do
  29. {
  30. printf("[1]A%cadir producto [3]Ver base de datos [4]Salir\n", 164);
  31. std::cout << "-> ";
  32. std::cin >> op;
  33. switch (op)
  34. {
  35. case 1:
  36. addpr(punpres);
  37. break;
  38. case 3:
  39. db(punpres);
  40. break;
  41. case 4:
  42. return 0;
  43. default:
  44. std::cout << "Opcion invalida!" << std::endl;
  45. break;
  46. }
  47.  
  48. } while (! std::cin.fail());
  49. return 0;
  50. }
  51.  
  52. void addpr(prod *estr)
  53. {
  54. fflush(stdin);
  55. srand(time(NULL));
  56. std::cout << "Inserte nombre del producto: ";
  57. std::cin.getline(estr[pos].name, 100, '\n');
  58. std::cout << "Inserte precio: ";
  59. std::cin >> estr[pos].precio;
  60. estr[pos].id = rand();
  61. ++pos;
  62. ++nume;
  63. }
  64.  
  65. void db(prod *a)
  66. {
  67. for (pos = 0; pos < nume; ++pos)
  68. {
  69. printf("Nombre: %s\n", a[pos].name);
  70. printf("Precio: $ %i\n", a[pos].precio);
  71. printf("ID: %i", a[pos].id);
  72. printf("\n------------------------\n");
  73. }
  74. }
  75.  
  76.  
En el mismo código se comenta el error, pues el cual es que estoy creando 512 estructuras, por lo cúal hay un límite de productos que se pueden ingresar. Pero me gustaría hacerlo dinámico, osea que el número de estructuras sea proporcional al número de productos. O(n)?
Ya le he tratado de hacer, con malloc, pero no era lo que buscaba...
Saludos :)
PD: Si compilo esto con g++, todo bien (también probé compilando con el standard C++11 y sigue funcionando), pero si compilo con cl (el compiler de VS Studio), al ejecutarlo y elegir la opción 1, se bugea y se salta el campo de ingresar nombre a ingresar precio.


« Última modificación: 25 Octubre 2018, 02:54 am por konniskatt » En línea

elgilun

Desconectado Desconectado

Mensajes: 17



Ver Perfil
Re: Optimizar este código en C++
« Respuesta #1 en: 25 Octubre 2018, 06:55 am »

En C++ un array de dimensión dinámica es de preferencia un std::vector
https://es.cppreference.com/w/cpp/container/vector



En línea

huchoko

Desconectado Desconectado

Mensajes: 97


Ver Perfil WWW
Re: Optimizar este código en C++
« Respuesta #2 en: 25 Octubre 2018, 17:57 pm »

En C++ un array de dimensión dinámica es de preferencia un std::vector
https://es.cppreference.com/w/cpp/container/vector


Me podrías dar un ejemplo con mi código?
En línea

elgilun

Desconectado Desconectado

Mensajes: 17



Ver Perfil
Re: Optimizar este código en C++
« Respuesta #3 en: 25 Octubre 2018, 20:09 pm »

Código:
#include <iostream>
#include <vector>
#include <string>
#include <cstdlib>

struct prod
{
prod(std::string name, int precio, int id)
: name{ name }
, precio{ precio }
, id{ id }
{}

int precio;
int id;
std::string name;
std::string adc; // caracteristicas adicionales
};

void addpr(std::vector<prod>& vProd);
void db(std::vector<prod>& vProd);

int main()
{
std::vector<prod> vProd; // el "array" de productos

// ...
// ... etcétera
// ...

// añadir producto:
addpr(vProd);

// ...
// mostrar productos:
db(vProd);
}

void addpr(std::vector<prod>& vProd)
{
std::string name;
int precio;

std::cout << "inserte nombre del producto: ";
std::cin >> name;
std::cout << "inserte precio: ";
std::cin >> precio;

vProd.emplace_back(name, precio, std::rand());
}

void db(std::vector<prod>& vProd)
{
for (const auto& i : vProd) {
std::cout << "mombre: " << i.name << '\n'
<< "precio: " << i.precio << '\n'
<< "ID: " << i.id << "\n------------------------\n";
}
}
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Se puede optimizar este codigo ?
PHP
nobo 6 3,603 Último mensaje 5 Marzo 2012, 22:41 pm
por nobo
[Código-Python]Código Ofuscado nº2 JaAViEr|0x5d [Actualizado]
Scripting
0x5d 6 5,396 Último mensaje 7 Mayo 2013, 23:52 pm
por CodeSource
Se puede optimizar más este codigo?
Desarrollo Web
z3nth10n 2 2,662 Último mensaje 16 Abril 2013, 07:33 am
por z3nth10n
Pasar este código de C a C#
.NET (C#, VB.NET, ASP)
Meta 3 2,310 Último mensaje 26 Octubre 2013, 20:58 pm
por Spiritdead5
Optimizar el código de este ejercicio (arrays) C++
Programación C/C++
seryioo 1 2,072 Último mensaje 8 Agosto 2015, 08:37 am
por exoesqueleto
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines