Así que si quiero crear una gran matriz como arriba, ¿qué debo hacer?
Evite utilizar la pila para estos casos (en otras palabras, evite crear matrices como estas que no se asignan al montón cuando se trabaja dentro de una función). Solo para hacerte una idea, mi pila local de subprocesos tiene solo 16 kilobytes de tamaño. 4501 * 4501 * 4 (suponiendo 4 bytes por int) = ~ 81 megabytes.
considerar algo como esto en su lugar:
typedef vector<int> Row;
typedef vector<Row> Matrix;
Matrix dp(4501, Row(4501));
Si desea crear una matriz de 10x50:
Matrix dp(10, Row(50));
Se puede usar esta al igual que la matriz DP normales no se había desbordado la pila. Este se asignará y se desasignará automáticamente a/desde el montón para que no tenga que preocuparse por el desbordamiento de la pila al usarlo.
dp[5][10] = 123;
¡Buena suerte!
[Editar] También hay soluciones matriciales en potencia que vale la pena analizar pero que sugieren que el impulso puede ser un poco prematuro dada la naturaleza del tema.
Excepto que no use directamente 'new' ni' malloc'. – GManNickG
No hay nada explícitamente incorrecto con ellos, especialmente en el nivel de comprensión hacia dónde se dirige. –
no hay nada explícito en ellos, pero "new int [4501] [4501]" está mal, que es lo que GMan quiso decir. –