В случае массив является статической продолжительности (глобальная переменная), я бы сказал, что первая из них предпочтительнее, так как она не требует никакого кода - она инициализируется средой выполнения.
Если переменная является автоматической продолжительностью (локальная переменная), какая из них лучше, если она лучше другой, зависит от компилятора. Скорее всего, оба будут очень похожи.
Совокупность переменной продолжительности хранения для хранения - O (n) для всех случаев. Первый случай - O (1) для переменной статической продолжительности хранения.
Конечно, если вы хотите заполнить массив значением 5, второй вариант намного лучше, потому что он не требует записи 10000 5
в исходный файл.
Вы также можете обнаружить, что использование memset(array, 0, sizeof(array));
лучше, чем оба - снова, в зависимости от компилятора. Это все еще O (n), но фактическое время, необходимое для заполнения массива, может быть короче, потому что memset
может быть лучше оптимизирован, чем то, что генерирует компилятор для вашего случая цикла [и что он делает для инициализированных переменных]. memset
не будет работать для заполнения массива 5
.
Вы также можете использовать std::fill(array, &array[10000], 5);
, чтобы установить значение 5 во всем массиве, и компилятор должен выполнить достойную работу по его оптимизации.
Наконец, я должен указать, что подобные вещи ДЕЙСТВИТЕЛЬНО имеют значение, если они делают в коде, который выполняется много. С тех пор, как заполнение 40 Кбайт данных прошло достаточно долго, чтобы действительно беспокоиться о себе. Как 20+ лет.
Является ли «массив» статической или автоматической продолжительности? –
Я искал обе ситуации. –