Инициализация примитивного массива к одному значению

Существует ли способ инициализировать массив примитивов, сказать целочисленный массив, к 0? Не используя для цикла? Поиск краткого кода, который не включает для цикла.

:)

6
задан bobber205 12 April 2010 в 21:22
поделиться

6 ответов

Есть способы скрыть то, что вы делаете, с другим синтаксисом, и это то, что вам дают другие ответы - std :: fill, memset, = {} и т. Д. В общем случае, хотя (за исключением уловок, специфичных для компилятора, таких как ZI), подумайте, что нужно сделать с помощью скомпилированного кода:

  • он должен знать, где начинается ваш блок / массив памяти;
  • он должен установить значение каждого элемента блока по очереди;
  • ему необходимо неоднократно проверять, достигнут ли конец блока.

Другими словами, требует, чтобы был петлей в довольно фундаментальном смысле.

0
ответ дан 8 December 2019 в 03:38
поделиться

Да, это возможно. Метод инициализации зависит от контекста.

Если вы объявляете статический или локальный массив, используйте = {} инициализатор

int a[100] = {};  // all zeros

Если вы создаете массив с new [] , используйте () инициализатор

int *a = new int[100](); // all zeros

Если вы инициализируете нестатический массив элементов в списке инициализаторов конструктора, используйте () инициализатор

class C {
  int a[100];

  C() : a() // all zeros
  {
    ...
  }
};
9
ответ дан 8 December 2019 в 03:38
поделиться

Вы можете использовать memset если вы хотите, чтобы все ваши значения были равны нулю. Кроме того, если вы хотите инициализировать только нулевое значение, вы можете объявить свой массив таким образом, чтобы он был помещен в раздел ZI памяти.

1
ответ дан 8 December 2019 в 03:38
поделиться

Если число равно нулю, вы также можете использовать memset (хотя это больше похоже на C-стиль):

int a[100];
memset(a, 0, sizeof(a));
1
ответ дан 8 December 2019 в 03:38
поделиться
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 - это просто оболочка вокруг цикла, которого вы пытаетесь избежать, и = {}; может быть реализовано в таких условиях.

17
ответ дан 8 December 2019 в 03:38
поделиться

двойной A [10] = {значение}; // инициализируем A значением . Я не помню, нужно ли компилировать значение константой или нет. не будет работать с автоматическими массивами

0
ответ дан 8 December 2019 в 03:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: