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

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Problemas con arrays C++
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problemas con arrays C++  (Leído 2,566 veces)
#Aitor

Desconectado Desconectado

Mensajes: 173



Ver Perfil
Problemas con arrays C++
« en: 26 Marzo 2014, 03:46 am »

Hola buenas.

Ando probando los arrays en C++, y vengo muy acostumbrado de PHP. Tengo el siguiente problema, según C++ para hacer arrays se utiliza la siguiente sintaxis.



Código
  1. Type name[long] = {... , ... , ...};

En el caso del ejemplo de la tabla anterior.
Código
  1. String foo[4]{ "Aitor", "Lluvia", "Luna", "Azul" };

A dónde quiero llegar es si lo siguiente retornaría falso.

Código
  1. if ( foo[5] == false){ cout << "Retorna false"; }

Pero da errores de compilación. Suponiendo que no retornase un valor False... ¿Cómo cerrarías el siguiente bucle?

Código
  1. int main()
  2. {
  3.    string foo[4] = {"Aitor", "Lluvia", "Luna", "Azul"};
  4.    int x = 0;
  5.  
  6.        while(...){
  7.        cout  << foo[x] << endl;
  8.        x++;
  9.  
  10.    }
  11. }

Podría usarse

Código
  1. while(x < 4){

Pero es muy forzado y no es "automatizado" dado que doy por hecho que sé cuanto es la longitud del array.

Un saludo y gracias.


En línea

Mi algoritmo en PHP (estupideces y más).
Código
  1. while($Se_feliz){
  2.  Piensa_un_OBJETIVO(); // Sin excusas!
  3.  if($Tienes_un_objetivo){
  4.    Suspira(); // Sé paciente.
  5.    if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return;
  6.      //RETURN; ¿O volvemos a empezar?
  7.    }else{
  8.      Inténtalo_de_nuevo();
  9.    }
  10.  }
  11. }
rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: Problemas con arrays C++
« Respuesta #1 en: 26 Marzo 2014, 04:23 am »

Para calcular el numero de elementos de un array puedes utilizar, siguiendo tu ejemplo:
Código
  1. #include <iostream>
  2. using std::cin;
  3. using std::cout;
  4. using std::endl;
  5.  
  6. #include <string>
  7. using std::string;
  8.  
  9. int main()
  10. {
  11.   string foo[4] = {
  12.      "Aitor",
  13.      "Lluvia",
  14.      "Luna",
  15.      "Azul"
  16.   };
  17.   size_t num_elem = sizeof foo / sizeof foo[0];
  18.  
  19.   for (size_t i = 0; i < num_elem; i++)
  20.      cout  << foo[i] << endl;
  21.  
  22.   return 0;
  23. }
Sin embargo es un idioma de C, si estas aprendiendo C++ mejor utiliza la clase vector.

Bajo el nuevo estándar C++11 la declaración de un vector es similar a la de un array y al utilizar "auto" nos olvidamos de indicar el tipo de la variable en el único bucle del programa:
Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4.  
  5. #include <string>
  6. using std::string;
  7.  
  8. #include <vector>
  9. using std::vector;
  10.  
  11. int main()
  12. {
  13.   vector<string> foo = {
  14.      "Aitor",
  15.      "Lluvia",
  16.      "Luna",
  17.      "Azul"
  18.   };
  19.  
  20.   for (auto i = 0; i != foo.size(); ++i)
  21.      cout  << foo[i] << endl;
  22.  
  23.   return 0;
  24. }

Si el programa se compila bajo el estándar anterior C++98 los elementos del array se deben agregar manualmente y se debe indicar el tipo de la variable (este es vector<string>::size_type).

Un saludo


En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: Problemas con arrays C++
« Respuesta #2 en: 26 Marzo 2014, 08:09 am »

Bajo el nuevo estándar C++11 la declaración de un vector es similar a la de un array y al utilizar "auto" nos olvidamos de indicar el tipo de la variable en el único bucle del programa.

En C++11 también se puede simplificar el bucle:

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4.  
  5. #include <string>
  6. using std::string;
  7.  
  8. #include <vector>
  9. using std::vector;
  10.  
  11. int main()
  12. {
  13.   vector<string> foo = {
  14.      "Aitor",
  15.      "Lluvia",
  16.      "Luna",
  17.      "Azul"
  18.   };
  19.  
  20.   for ( auto str : foo )
  21.      cout  << str << endl;
  22.  
  23.   return 0;
  24. }
En línea

amchacon


Desconectado Desconectado

Mensajes: 1.211



Ver Perfil
Re: Problemas con arrays C++
« Respuesta #3 en: 26 Marzo 2014, 10:48 am »

Ni "forzado" ni "automatico", en C no habia ningun sistema para controlar que no adcedieras a posiciones erroneas. Ahi trabajas sabiendo la longitud del array (salvo en el caso de cadenas, que se ponia un cero en el ultimo elemento para acabar).

Bueno ni en C++ hay un sistema. Las razones de esto son puramente por eficiencia, es un desperdicio de recursos ir comprobando si adcedes a una posicion erronea cada vez. De modo que si lo haces, no da error de compilacion y sus consecuencias son indeterminadas (puede que modifiques a otras variables, puede que te de un error de ejecución...).

Los compañeros de arriba te han respondido usando la clase vector. Una objeto que contiene un array que puedes redimensionarlo a tu gusto, ese objeto ademas tiene control sobre su tamaño y podemos consultarlo con el metodo size().

Realmente a la hora de controlarlo no hay mucha diferencia: Su tamaño. Si adcedemos a posiciones invalidas dara error de ejecucion.
« Última modificación: 26 Marzo 2014, 10:52 am por amchacon » En línea

Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar
Yoel Alejandro

Desconectado Desconectado

Mensajes: 254



Ver Perfil WWW
Re: Problemas con arrays C++
« Respuesta #4 en: 26 Marzo 2014, 15:35 pm »

Si el autor del post viene de programar PHP sería mucho mejor atenerse a las clases de alto nivel de C++ (sencillas y potentes), que programar en el "rudimentario" (pero elemental y eficiente) nivel de C. ¿no?

Para programar en C, y sobre todo con arrays y cadenas, debes tener muy en cuenta aspectos de hardware para elaborar código eficiente. Mientras las clases de C++ abstraen la capa de hardware, manteniendo al programador en un nivel como "virtual" diría yo, independiente casi por completo de los aspectos máquina.

Lo mejor sería la clase vector sobre el tipo string, es lo que más se parece a la manera de trabajar PHP, javascript, Java y similares.
En línea

Saludos, Yoel.
P.D..-   Para mayores dudas, puedes enviarme un mensaje personal (M.P.)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problemas con arrays e indices, como volver a 0 el indice?
Programación Visual Basic
Fucko 3 2,115 Último mensaje 11 Mayo 2010, 07:44 am
por BlackZeroX
problemas con Arrays PHP
PHP
Dreamcacher 7 4,362 Último mensaje 9 Diciembre 2010, 10:16 am
por Dreamcacher
problemas con comparación de arrays + presentación
Programación C/C++
doctore17 7 3,013 Último mensaje 5 Diciembre 2014, 11:12 am
por Orubatosu
Problemas con toString en Arrays Bidimensionales
Java
n-utz 3 2,612 Último mensaje 6 Abril 2017, 00:16 am
por n-utz
Problemas con arrays (unidimensionales y multidimensionales) y operadores
Java
kino 1 2,874 Último mensaje 1 Junio 2017, 09:40 am
por 3n31ch
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines