Я хочу, чтобы массив был доступен для всех функций класса.
Я поместил массив как частную переменную в заголовочный файл.
private:
int* arrayName;
В файле .cpp, где я реализую класс, конструктор принимает значение int (размер) и создает массив. Цель состоит в том, чтобы заполнить его
ClassName::ClassName(int numElements){
arrayName = new int[numElements]; //make arrays the size of numElements
for(int i = 0; i<numElements; i++)
arrayName[i] = 0;
}
Я чувствую, что это довольно неэффективно. Я знаю, что вы можете сделать int array [5] = {0}; но как ты это делаешь, когда изначально не знаешь размера.
Если вы хотите обнулить инициализированный массив с нуля, просто выполните Значение инициализации Это. Это имеет эффект нулевой инициализации его элементов:
arrayName = new int[numElements]();
// ^^
Но вы действительно хотите использовать std::vector<int>
,
private:
std::vector<int> vname;
а также
ClassName::ClassName(int numElements) : vname(numElements) {}
Таким образом, вам не нужно беспокоиться об удалении массива и реализации конструкторов копирования и операторов присваивания.
Вы можете использовать memset
функция:
memset(arrayName,0,sizeof(int)*numElements);
это void * memset ( void * ptr, int value, size_t num );
функция устанавливает первые num байтов блока памяти, указанного ptr
до указанного значения (интерпретируется как беззнаковый символ).
Чтобы использовать его, вы должны включить string.h
заголовочный файл
Для дополнительной информации: http://www.cplusplus.com/reference/cstring/memset/
То, что вы хотите сделать, это постепенно расширять массив по требованию.
arrayName = new int[numElements];
for(int i = 0; i<numElements; i++)
arrayName[i] = 0;
Приведенный выше код (то, что вы дали) даст вам массив размера numElements, а затем цикл for заполнит его. Это выделено сейчас, и, насколько я понимаю, не может быть просто или легко изменено в размере (memset перезапишет ранее сохраненные значения в массиве).
Вы можете скопировать весь массив каждый раз, когда хотите изменить его размер:
int * oldarr = new int[OldSize];
//fill your old array
int * newarr = new int[NewSize];
for(int i = 0; i<OldSize; i++)
newarr[i] = oldarr[i];
Помимо этого, вы можете сделать массив намного больше или использовать различные STL, такие как std :: vector. Вектор может быть увеличен с помощью простой функции push_back и позволяет оператору [] получить доступ (например, arr [5] и еще много чего).
Надеюсь это поможет!