Tengo una matriz de enteros que debe actuar como un amortiguador:C: forma inteligente de "cambiar" una matriz?
x = {{0, 0, 0, 0, 0}, {1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}};
Ahora si añado una nueva fila {3, 3, 3, 3, 3}
, la nueva matriz debe ser similar:
x = {{1, 1, 1, 1, 1}, {2, 2, 2, 2, 2}, {3, 3, 3, 3, 3}};
¿Hay una forma inteligente de hacerlo sin copiar todos los elementos?
Las respuestas múltiples a continuación son técnicamente correctas, pero todas implican diferentes compensaciones. ¿Puedes expandir un poco tu uso esperado? ¿Qué tan grandes serán estas matrices? ¿Con qué frecuencia esperas agregar una fila, en comparación con la cantidad de veces que accederás a los datos de las matrices? ¿Tendrás acceso a elementos individuales de la matriz, o solo se leerá como una entidad completa de principio a fin? ¿Desea poder liberar partes de la matriz de vez en cuando? Si es así, ¿solo desde el final, o desde el principio, o desde una fila arbitraria? –
La matriz no es grande (como 100 elementos en total).Siempre accederé a toda la matriz, la fila "vieja" puede desaparecer (comportamiento de fifo-queue), las actualizaciones ocurren muy a menudo. –
En ese caso, el enfoque de módulo propuesto por @ruslik es probablemente la mejor opción. Simplemente asigne una matriz que pueda manejar el tamaño máximo, mantenga un puntero al encabezado actual y envuelva el final de la matriz cuando se quede sin espacio. –