C ++ Указатель инициализации массива Ints

Я хочу, чтобы массив был доступен для всех функций класса.

Я поместил массив как частную переменную в заголовочный файл.

    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}; но как ты это делаешь, когда изначально не знаешь размера.

1

Решение

Если вы хотите обнулить инициализированный массив с нуля, просто выполните Значение инициализации Это. Это имеет эффект нулевой инициализации его элементов:

arrayName = new int[numElements]();
//                              ^^

Но вы действительно хотите использовать std::vector<int>,

private:
std::vector<int> vname;

а также

ClassName::ClassName(int numElements) : vname(numElements) {}

Таким образом, вам не нужно беспокоиться об удалении массива и реализации конструкторов копирования и операторов присваивания.

6

Другие решения

Вы можете использовать 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/

0

То, что вы хотите сделать, это постепенно расширять массив по требованию.

 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] и еще много чего).

Надеюсь это поможет!

0
По вопросам рекламы [email protected]