Существует ли способ инициализировать массив примитивов, сказать целочисленный массив, к 0? Не используя для цикла? Поиск краткого кода, который не включает для цикла.
:)
Есть способы скрыть то, что вы делаете, с другим синтаксисом, и это то, что вам дают другие ответы - std :: fill, memset, = {}
и т. Д. В общем случае, хотя (за исключением уловок, специфичных для компилятора, таких как ZI), подумайте, что нужно сделать с помощью скомпилированного кода:
Другими словами, требует, чтобы был петлей в довольно фундаментальном смысле.
Да, это возможно. Метод инициализации зависит от контекста.
Если вы объявляете статический или локальный массив, используйте = {}
инициализатор
int a[100] = {}; // all zeros
Если вы создаете массив с new []
, используйте ()
инициализатор
int *a = new int[100](); // all zeros
Если вы инициализируете нестатический массив элементов в списке инициализаторов конструктора, используйте ()
инициализатор
class C {
int a[100];
C() : a() // all zeros
{
...
}
};
Вы можете использовать memset если вы хотите, чтобы все ваши значения были равны нулю. Кроме того, если вы хотите инициализировать только нулевое значение, вы можете объявить свой массив таким образом, чтобы он был помещен в раздел ZI памяти.
Если число равно нулю, вы также можете использовать memset (хотя это больше похоже на C-стиль):
int a[100];
memset(a, 0, sizeof(a));
int array[10] = {}; // to 0
std::fill(array, array + 10, x); // to x
Обратите внимание, если вам нужен более общий способ получить результат:
template <typename T, size_t N>
T* endof(T (&pArray)[N])
{
return &pArray[0] + N;
}
Чтобы получить:
std::fill(array, endof(array), x); // to x (no explicit size)
Следует упомянуть std :: fill
- это просто оболочка вокруг цикла, которого вы пытаетесь избежать, и = {};
может быть реализовано в таких условиях.
двойной A [10] = {значение}; // инициализируем A значением
.
Я не помню, нужно ли компилировать значение константой или нет.
не будет работать с автоматическими массивами