Как записать это в другом (возможно, короче) путь? Существует ли лучший способ инициализировать выделенный массив в C++?
int main(void) {
int* a;
a = new int[10];
for (int i=0; i < 10; ++i) a[i] = 0;
}
int *a =new int[10](); // Value initialization
ISO C ++ Раздел 8.5 / 5
Инициализация значения объекта типа T означает:
- если T является типом класса (пункт 9) с конструктором, объявленным пользователем (12.1), то вызывается конструктор по умолчанию для T (и инициализация плохо сформирована, если T не имеет доступного конструктора по умолчанию);
- если T - тип класса без объединения без конструктора, объявленного пользователем, тогда каждый нестатический член данных и компонент базового класса T инициализируется значением;
- если T является типом массива, то каждый элемент инициализируется значением;
- в противном случае объект равен нулю -initialized
Чтобы узнать о различиях между терминами инициализация нуля
, инициализация значения
и инициализация по умолчанию
, прочтите this
Как насчет трех способов?
1. int *a = new int[10]();
2. std::vector<int> a(10, 0);
3. int *a = new int[10];
memset(a, 0, sizeof(int) * 10);
По многочисленным просьбам, еще пара:
4. int *a = new int[10];
std::fill(a, a + 10, 0);
5. std::vector<int> a(10);
std::fill(a.begin(), a.end(), 0);
Я специалист по C и не совсем уверен, что «новое» действительно делает, но может ли это сработать?
int
main( void ) {
int i = 10; // start at the far end of the array
int *a = new int[10];
while ( i-- ) a[i] = 0; // while ( i == 9, 8, 7, ... , 0 )
}
Просто чтобы показать мой новый любимый счетчик циклов: while (condition) .
int main(void) { int *a; a = new int[10]; for(int i=0;i<10;++i) a[i]=0; }
;-)
Вы можете использовать memset
Устанавливает первое число байтов блока памяти, на который указывает ptr, равным указанному значению (интерпретируемому как символ без знака).
#include <algorithm>
int main() {
int *a = new int[10];
std::fill(a, a + 10, 0);
}
Может быть, вы могли бы попробовать что-то вроде этого:
int* initIntArray(int size) {
int *temp = new int[size];
for(int i = 0; i < size; i++) {
temp[i]=0;
}
return temp;
}
int main () {
int* a = initIntArray(10);
int* b = initIntArray(10);
int* c = initIntArray(10);
//do stuff with arrays
delete [] a;
delete [] b;
delete [] c;
return 0;
}
кстати, как насчет использования calloc () ? say
int i * = (int [10]) calloc (10 * sizeof (int))
ну, я просто еще один парень C .. здесь приветствуются любые комментарии
int *a = (int*) calloc(10, sizeof(*a));
(и проверьте, имеет ли значение NULL, или перепишите безопасную обертку против calloc).