Должны ли мы объявить условие, которое мы используем перед циклом for? - PullRequest
2 голосов
/ 06 июля 2019

Например, если я использую длину массива, чтобы определить, сколько раз выполняется код в цикле for, я должен инициализировать счетчик массива поверх цикла for, чтобы программа не продолжала вычислять длина строки?

Простой код, который печатает каждый элемент в массиве:

Без инициализации размера массива

int myArray[5] = { 1,2,3,4,5 };

for (int iPos = 0; iPos < size(myArray); ++iPos)
    cout << myArray[iPos];

инициализация размера массива перед циклом for

int myArray[5] = { 1,2,3,4,5 };

int sizeOfArray = size(myArray);
for (int iPos = 0; iPos < sizeOfArray; ++iPos)
    cout << myArray[iPos];

Ответы [ 2 ]

4 голосов
/ 06 июля 2019

for (int iPos = 0; iPos < size(myArray); ++iPos) будет вычислять размер myArray на каждой итерации.Это может быть важным, если размер myArray может измениться в теле цикла.Так что будьте осторожны.

Если размер myArray не может измениться в цикле, то извлечение вычисления до цикла, как const int sizeOfArray = size(myArray); , может получить вам крошечный немного производительности, если компилятор не осознает этого сам и выводит вычисления из цикла самостоятельно.

Более простой способ сделать это - просто использовать цикл Range-For, посколькуопределены для вычисления размера только один раз:

for (const auto& element : myArray)
    cout << element;

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

2 голосов
/ 06 июля 2019

sizeof оператор времени компиляции, поэтому нет проблем, так как вы используете статические массивы.

Для динамического массива вызов std::vector::size() теоретически может выполняться несколько раз, но хороший оптимизирующий компилятор будет кешировать его, пока вы не измените вектор внутри цикла.

Даже если это не так, size () занимает мало времени для выполнения (постоянная сложность).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...