Вы люди имеют так усложненной это. Конечно, вы можете сделать это на C++. Для него хорошо использовать обычный массив для повышения эффективности. Вектор имеет смысл только в том случае, если он заранее не знает конечный размер массива, т. Е. Он должен расти со временем.
Если вы знаете размер массива на один уровень выше в цепочке, шаблонный классом является самым простым, потому что нет динамического распределения и шансов нет утечек памяти:
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
Если вы не можете знать длину в месте, где вы объявляете объект, или если вы хотите повторно использовать один и тот же объект с разной длиной или вы должны принять неизвестную длину, тогда вам нужно выделить его в свой конструктор и освободить его в своем деструкторе ... (и в теории всегда проверяйте, чтобы он работал ...)
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 Если вы планируете регулярно использовать C++, я настоятельно рекомендую вам ознакомиться со стандартной библиотекой шаблонов. Это упрощает работу с коллекциями данных. – Brian
В качестве сторонних векторов относительно легко работать с массивом, не зная размера заранее. Нет необходимости знать размер заранее; вы можете добавлять элементы в конец вектора в (амортизированном) O (1) времени так или иначе, используя push_back. – Brian
Использование векторов приносит новые проблемы, так как класс, который я пытаюсь использовать для векторизации, защитил «новых» операторов. Но это было не то, о чем я так не поверил. – zaratustra