Buenas, soy un completo n00b de la programación y estoy siguiendo un par de libros para aprender a programar, en concreto orientado a los métodos numéricos y al cálculo científico. Pido disculpas si hay hilo de Cpp pero el buscador no me lo ha devuelto.
Estoy siguiendo "Parallel Scientific Computing in C++ and MPI" de George Em Karniadakis y Robert M. Kirby II. Es del 2003, por lo que asumo que algunas de las cosas que hacen pueden estar desfasadas y, creo que por esto, viene mi pregunta. En este libro para pasar una variable que guarda el número de elementos con los que inicializar un array lo hace con dynamic allocation. Por ejemplo:
int npts = 10;
double ** x;
x = new double*[npts];
...
delete[] x;
aunque el ejemplo no es muy bueno puesto que aquí "npts" es constante, pero asumamos que para mi problema no lo es (suele ser porque se introduce con un cin). El tamaño del array no cambia a lo largo del programa, es decir, el único problema es que el tamaño está guardado en una variable que no puedo declarar como constante.
Buscando si había forma de tener que desentenderme del "delete[]", he buscado en google y me he encontrado con que los vectores de la librería estándar siguen un poco la misma idea. Sin embargo, por lo poco que he leído son interesantes cuando el tamaño del vector va cambiando a lo largo del programa, que no es mi caso. De hecho, según otro libro que estoy siguiendo, "C++ Primer 5th Edition" de Lippman:
The standard requires that vector implementations can efficiently add elements at run time. Because vectors grow efficiently, it is often unnecessary—and can result in poorer performance—to define a vector of a specific size. The exception to this rule is if all the elements actually need the same value. If differing element values are needed, it is usually more efficient to define an empty vector and add elements as the values we need become known at run time. Moreover, as we’ll see in § 9.4 (p. 355), vector offers capabilities to allow us to further enhance run-time performance when we add elements. Starting with an empty vector and adding elements at run time is
distinctly different from how we use built-in arrays in C and in most other languages. In particular, if you are accustomed to using C or Java, you might expect that it would be best to define the vector at its expected size. In fact, the contrary is usually the case.
aunque esto contradice lo que he leído en StackExchange, sin embargo, supongo que prefiero fiarme del libro. Entonces tendría las opciones de inicializar vectores vacío e ir añadiendo elementos o inicializarlo con el tamaño que necesito y cambiarlos.
Expuesto esto, ¿cuál es la mejor forma de tratar mi problema? ¿Con la dynamic allocation de arrays, vectores inicializados como vacíos o vectores inicializados con el número de elementos (que sé de antemano) que necesito? ¿Alguna otra forma?
Cualquier cosa que no quede clara me puedo extender, es la primera vez que pregunto algo de programación y creo que me he explicado fatal. Pido disculpas de antemano por ello. Gracias.