Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Hallar el tamaño de un vector

Estas en el tema de Hallar el tamaño de un vector en el foro de C/C++ en Foros del Web. Hola, me gustaría saber por qué funciones del tipo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C: Ver original int f ( int v [ ] ) {   ...
  #1 (permalink)  
Antiguo 19/07/2011, 18:04
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 7 meses
Puntos: 3
Hallar el tamaño de un vector

Hola, me gustaría saber por qué funciones del tipo:

Código C:
Ver original
  1. int f (int v []){
  2.    
  3.     return (sizeof (v)/sizeof(int));
  4.    
  5. }

o definiciones del tipo:

Código C:
Ver original
  1. #define length_int(x) (sizeof(x)/sizeof(int))
en un archivo ".h" aparte no funcionan y también como sacar el tamaño de un vector en un archivo aparte.

Un saludo!
  #2 (permalink)  
Antiguo 19/07/2011, 20:17
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Hallar el tamaño de un vector

Poruqe en este ejemplo:
Código C++:
Ver original
  1. int f (int v []){
  2.    
  3.     return (sizeof (v)/sizeof(int));
  4.    
  5. }

v es un puntero y todo puntero tiene tamañano de 4 bytes. Asi que olvidate de eso. Tienes que hacerlo a mano. Guardar el tamaño del vector aparte. Es mi recomendacion.


Esa tecnica solo funciona si el vector esta definido asi int v[10]; y solo funciona en la funcion o ambito en el cual este definido. Si lo pasas a otra funcion solomente pasas el puntero no todo el vector.
  #3 (permalink)  
Antiguo 19/07/2011, 22:55
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 7 meses
Puntos: 71
Respuesta: Hallar el tamaño de un vector

El problema es de sizeof, tu vector debe de ser estático para que esa función funcione, supongo que haz probado con vectores dinámicos por ello dices que no funciona.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #4 (permalink)  
Antiguo 20/07/2011, 05:33
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Hallar el tamaño de un vector

Si, la cosa era esa, si utilizas vectores dinámicos cómo sacarles las dimensiones. El problema es ese, que si le pasas el vector a la función le pasas el puntero. Sin embargo cuando utilizas el

Código C:
Ver original
  1. #define length(x) (sizeof(x)/sizeof(int))

no le estás pasando el puntero también?, o cuando lo utilizas dentro de la misma función... Además si copias ese macro a otro archivo y luego lo incluyes, por qué no funciona?

Un saludo y gracias por contestar!
  #5 (permalink)  
Antiguo 20/07/2011, 16:00
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 7 meses
Puntos: 71
Respuesta: Hallar el tamaño de un vector

Te aconsejo que en las funciones que vas a utilizar declares un parámetro con la longitud del vector para que no tengas muchas complicaciones y también te sugiero revisar la documentación de sizeof, para que veas por ti mismo las debilidades que tiene en los casos que mencionas.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #6 (permalink)  
Antiguo 20/07/2011, 19:16
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Hallar el tamaño de un vector

No hay que acostumbrarse a otros lenguajes de programacion donde la memoria es administrada por el lenguaje y el compilador. En esos lenguajes hay muchas cosas que parecen ser simple pero utilizan mas datos de lo que te muestran.

C/C++ son lenguajes de mas bajo nivel (lo que no significa que sean peores). Por ejemplo la memoria es monejada por el usuario (del lenguaje, no del programa) hay que recorda que se esta usando y que se tiene que liberar. Tambien saber el tamaño de un vector es tu responsabilidad.

Una idea podria ser crear una clase o usar vector. Pero como para que aprendas mira un simple ejemplo:

Código C:
Ver original
  1. class vector {
  2.    int longitud;
  3.    int array;
  4.    vector (int n) {
  5.          array = new int[n]; longitud = n;
  6.    }
  7.    ~vector() {
  8.      delete array;
  9.    }
  10.    int length () { return longitud ;  }
  11.  
  12.    void redim ( int new_size) {
  13.          delete array;
  14.           array = new int[new_size];
  15.       }
  16.     int operator [] (int i) { return array[i];}
  17. }

Esa clase es un pequeño ejemplo. El contructor asigna memoria, tenes una metodo length que te da el tamaño. Podes redimensionar el vector... y tenes el operador [] sobrecargado para que se pueda usar como si fuese un array. Lo bueno seria pero que no hice es usar temple para que pueda ser un vector de cualquier tipo.

Espero uqe te sirva un poco las explicaciones.
  #7 (permalink)  
Antiguo 20/07/2011, 21:52
Avatar de CapacProg  
Fecha de Ingreso: marzo-2010
Ubicación: Lima - Perú
Mensajes: 324
Antigüedad: 14 años, 7 meses
Puntos: 71
Respuesta: Hallar el tamaño de un vector

En este punto lo mejor sería mejor usar algún STL Containers. Que son objetos que brindan una intefaz para casi cualquier cosa que se necesita almacenar en memoria.
__________________
%
El mejor guerrero no es el que triunfa siempre sino el que vuelve sin miedo a la batalla.
%
  #8 (permalink)  
Antiguo 21/07/2011, 23:02
Avatar de sbcl  
Fecha de Ingreso: julio-2011
Mensajes: 29
Antigüedad: 13 años, 4 meses
Puntos: 5
Respuesta: Hallar el tamaño de un vector

Yo ya me tope con este problema, Y la mejor solucion que encontre fue usar la clase Vector.
( #include <vector>)

Yo tenia el mismo problema tuyo, y el Length del #define solo sirve en algunos casos, por lo que no es conveniente.
Te recomiendo que uses la clase Vector, ya que ademas de guardar la longitud del vector, tiene muchisimas funciones mas que son de alta Utilidad.
Un abrazo.
  #9 (permalink)  
Antiguo 22/07/2011, 00:24
 
Fecha de Ingreso: marzo-2011
Mensajes: 94
Antigüedad: 13 años, 7 meses
Puntos: 3
Respuesta: Hallar el tamaño de un vector

Nunca he usado esa clase, donde puedo encontrar información?
  #10 (permalink)  
Antiguo 22/07/2011, 00:47
Avatar de sbcl  
Fecha de Ingreso: julio-2011
Mensajes: 29
Antigüedad: 13 años, 4 meses
Puntos: 5
Respuesta: Hallar el tamaño de un vector

Busca el Google "c++ vector".
Si no tenes problema en leer en ingles, vas a encontrar millones de cosas.
si por el otro lado te cuesta ingles o preferis en español, busca directamente "c++ vector español" ,y seguro te saltan un par de cosas para leer.
Saludos
  #11 (permalink)  
Antiguo 22/07/2011, 10:14
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años, 7 meses
Puntos: 228
Respuesta: Hallar el tamaño de un vector

Sino tenes esta pagina que es buenisima:
http://www.cplusplus.com/reference/stl/vector/

Etiquetas: funcion, hallar, tamaño, vectores
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:38.