Autor
|
Tema: Problemas con arrays C++ (Leído 2,566 veces)
|
#Aitor
Desconectado
Mensajes: 173
|
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. Type name[long] = {... , ... , ...};
En el caso del ejemplo de la tabla anterior. String foo[4]{ "Aitor", "Lluvia", "Luna", "Azul" };
A dónde quiero llegar es si lo siguiente retornaría falso. 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? int main() { string foo[4] = {"Aitor", "Lluvia", "Luna", "Azul"}; int x = 0; while(...){ cout << foo[x] << endl; x++; } }
Podría usarse 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).while($Se_feliz){ Piensa_un_OBJETIVO(); // Sin excusas! if($Tienes_un_objetivo){ Suspira(); // Sé paciente. if($Consigues_el_objetivo){ echo "¡Felicidades #Aitor!";return; //RETURN; ¿O volvemos a empezar? }else{ Inténtalo_de_nuevo(); } } }
|
|
|
rir3760
Desconectado
Mensajes: 1.639
|
Para calcular el numero de elementos de un array puedes utilizar, siguiendo tu ejemplo: #include <iostream> using std::cin; using std::cout; using std::endl; #include <string> using std::string; int main() { string foo[4] = { "Aitor", "Lluvia", "Luna", "Azul" }; size_t num_elem = sizeof foo / sizeof foo[0]; for (size_t i = 0; i < num_elem; i++) cout << foo[i] << endl; return 0; }
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: #include <iostream> using std::cout; using std::endl; #include <string> using std::string; #include <vector> using std::vector; int main() { vector<string> foo = { "Aitor", "Lluvia", "Luna", "Azul" }; for (auto i = 0; i != foo.size(); ++i) cout << foo[i] << endl; return 0; }
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
Mensajes: 1.248
|
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: #include <iostream> using std::cout; using std::endl; #include <string> using std::string; #include <vector> using std::vector; int main() { vector<string> foo = { "Aitor", "Lluvia", "Luna", "Azul" }; for ( auto str : foo ) cout << str << endl; return 0; }
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
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
|
|
|
|
Yoel Alejandro
|
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.)
|
|
|
|
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
|
11 Mayo 2010, 07:44 am
por BlackZeroX
|
|
|
problemas con Arrays PHP
PHP
|
Dreamcacher
|
7
|
4,362
|
9 Diciembre 2010, 10:16 am
por Dreamcacher
|
|
|
problemas con comparación de arrays + presentación
Programación C/C++
|
doctore17
|
7
|
3,013
|
5 Diciembre 2014, 11:12 am
por Orubatosu
|
|
|
Problemas con toString en Arrays Bidimensionales
Java
|
n-utz
|
3
|
2,612
|
6 Abril 2017, 00:16 am
por n-utz
|
|
|
Problemas con arrays (unidimensionales y multidimensionales) y operadores
Java
|
kino
|
1
|
2,874
|
1 Junio 2017, 09:40 am
por 3n31ch
|
|