trabaje un proyecto con vectores, pero quisiera saber porque es mas dificil con matrices?, yo matrices de verdad que no entendi.
¿Ein?
Eso dependerá del proyecto en cuestión, y por supuesto la dificultad es siempre subjetiva.
si, pero cual es la razon por la que la matriz es mas complicada?
Cita de: Josephvilla06 en 17 Julio 2013, 02:23 AM
si, pero cual es la razon por la que la matriz es mas complicada?
No tiene ninguna complicación :huh:
Los accesos a memoria en un vector son consecutivos (mas rapidos), en una matriz no.
gracias por esas respuestas, es que fue de un ensayo para el cual me estoy preparando
quien mas me puede comentar algo :huh: :huh: :huh: :huh:
Cita de: Oblivi0n en 17 Julio 2013, 02:44 AM
Los accesos a memoria en un vector son consecutivos (mas rapidos), en una matriz no.
El acceso a una matriz es exactamente igual al que se usa para acceder a un vector, los dos se almacenan como una matriz unidimensional y se accede a cada elemento a partir de un desplazamiento desde el primer elemento. No entiendo por qué dices que el acceso no es el mismo.
Pues yo tenia entendido que un vector y una matriz son exactamente lo mismo :huh:
Cita de: aguml en 17 Julio 2013, 11:12 AM
Pues yo tenia entendido que un vector y una matriz son exactamente lo mismo :huh:
Un vector tiene una sola dimensión y una matriz tiene dos... dado que la memoria es lineal no pueden ser iguales.
Cita de: eferion en 17 Julio 2013, 11:16 AM
Un vector tiene una sola dimensión y una matriz tiene dos... dado que la memoria es lineal no pueden ser iguales.
voy a intentar poner un ejemplo...
int vector[2] = {1, 2}
int matriz[2][2] {1, 2, 3, 4};
Primer caso en la memoria
| 1 | 2 |
Segundo caso (matriz):
| 1 | 2 | 3 | 4 |
En el vector para acceder al segundo elemento se hace vector[1]
En la matriz para acceder al tercer elemento (3), se accede mediante matriz[1][0], pero realmente se almaena de forma lineal, y el compilador a partir de los subindices i, j, sabe cuantas posiciones tienen que avanzar a partir del primer elemento, es decir:
El desplazamiento es:
(i * número de elementos columna) + j
Depende del compilador se almacenan de forma lineal o no.
C# tiene un modo de definir las matrices para que se almacenen de forma lineal matriz[x,y].
Se ve clara la diferencia respecto a matriz
- [y];
Un vector es como antes se comentaba : int vector[2] = {1,2}
Mientras que una matriz es int vector[2][2] = {{1,2},{3,4}};
Es mas rapido trabajar con vectores principalmente porque producen menos fallos de pagina, y el acceso es ligeramente mas rapido.
Cita de: Oblivi0n en 17 Julio 2013, 18:20 PM
Depende del compilador se almacenan de forma lineal o no.
Perdona pero no, cualquier compilador actual convierte tu matriz en un vector unidimensional. Por esa razón tienes que indicar el número de columnas cuandos pasas una matriz como parámetro a una función.
Otra cosa son las matrices "dinámicas" que creas con malloc/new. Se suelen hacer con un array de punteros (y ahí si hay perdida de rendimiento porque tienes que redireccionar dos veces).
Cita de: amchacon en 17 Julio 2013, 19:00 PM
Perdona pero no, cualquier compilador actual convierte tu matriz en un vector unidimensional. Por esa razón tienes que indicar el número de columnas cuandos pasas una matriz como parámetro a una función.
Otra cosa son las matrices "dinámicas" que creas con malloc/new. Se suelen hacer con un array de punteros (y ahí si hay perdida de rendimiento porque tienes que redireccionar dos veces).
eso mismo.
En concreto Oblivi0n, una matriz de .net tal que:
int[,] arr4 = new int [2,3] { {1,2,3}, {4,5,6} };
Reserva la memoria de forma lineal, no podía ser de otra forma, y tal que los elementos van en el siguiente orden: 1, 2, 3, 4, 5, 6 ... por tanto, para acceder a un elemento de la segunda fila necesitas hacer un salto... las matrices tienen tantos niveles de indirección como dimensiones posean.
Vector: 1 dimensión -> 1 nivel de indirección
Matriz típica: 2 dimensiones -> 2 niveles de indirección
...
Hola.
Siempre interpreté que las matrices se almacenan del modo que dice amchacon.
Row major order (http://en.wikipedia.org/wiki/Row-major_order)
Ordering of C++ Arrays (http://msdn.microsoft.com/en-us/library/8ccd1wzb%28v=vs.80%29.aspx)
Saludos :)
pues en todos los libros que he leido por ejemplo esto: char cadena(5) =("hola"); (perdonen lo de los parentesis pero el movil no tiene corchetes ni nada parecido) >:( . Segun los libros eso es un array de caracteres o vector, o matriz unidimensional. Usan cualquiera de esas definiciones para referirse a eso. Ahora con lo que decis ya no se que pensar.
Un vector y un array unidimensional son lo mismo, una matriz es bidimensional.
la matriz y un vector se leen igual sea el procesador que sea, y sea el compilador que sea, ahora la diferencia es que un vector es una matriz que tiene como particularidad que tiene una sola fila...pero no por eso deja de ser una matriz, y las matrices en un compilador las lee como un vector ejem
Citar[1][1]; [1][2]........[m][n-1], [m][n]/quote]
para decirlo en criollo agarra la matriz y la deja hecha un vector con la particularidad de que deben decirse exactamente donde van