Usted gente tienen de manera excesivamente complicada esto. Por supuesto, puedes hacer esto en C++. Está bien para él usar una matriz normal para la eficiencia. Un vector solo tiene sentido si no conoce el tamaño final de la matriz antes de tiempo, es decir, necesita crecer con el tiempo.
Si se puede saber el tamaño de la matriz de un nivel superior de la cadena, una clase de plantilla es la más fácil, porque no hay asignación dinámica y no hay posibilidad de pérdidas de memoria:
template < int ARRAY_LEN > // you can even set to a default value here of C++'11
class MyClass
{
int array[ARRAY_LEN]; // Don't need to alloc or dealloc in structure! Works like you imagine!
}
// Then you set the length of each object where you declare the object, e.g.
MyClass<1024> instance; // But only works for constant values, i.e. known to compiler
Si usted no puede saber la longitud en el lugar donde declaras el objeto, o si deseas reutilizar el mismo objeto con diferentes longitudes, o debes aceptar una longitud desconocida, entonces debes asignarlo en tu constructor y liberarlo en tu destructor ... (y en teoría siempre verifique para asegurarse de que funcionó ...)
class MyClass
{
int *array;
MyClass(int len) { array = calloc(sizeof(int), len); assert(array); }
~MyClass() { free(array); array = NULL; } // DON'T FORGET TO FREE UP SPACE!
}
I Si planea usar C++ regularmente, le recomiendo que se familiarice con la biblioteca de plantillas estándar. Hace que trabajar con colecciones de datos * mucho * sea más fácil. – Brian
Como un lado, los vectores hacen que sea relativamente fácil trabajar con la matriz sin saber el tamaño por adelantado. No es necesario saber el tamaño por adelantado; puede agregar elementos al final de un vector en tiempo (amortizado) O (1) de todos modos usando push_back. – Brian
Usar vectores trae problemas nuevos, ya que la clase que trato de vectorizar ha protegido a los "nuevos" operadores. Pero eso no fue lo que pedí, por lo tanto, no importa. – zaratustra