Пример цикла с использованием указателей, переписанных с использованием алгоритма STL, без цикла? - PullRequest
5 голосов
/ 12 мая 2011

Как бы я переписал приведенный ниже код, например, используя алгоритм STL без цикла?

vector<double> pizzaBox;
int biggestSlice = 0;
for (int* p = &pizzaBox[0]; p != pizzaBox[pizzaBox.size()]; p++) {
    if(*p > biggestSlice)
        biggestSlice = *p;
}

1 Ответ

14 голосов
/ 12 мая 2011

Предполагая, что вы действительно имели в виду vector<int>, и после исправления условия окончания цикла вы можете использовать алгоритм max_element здесь:

int biggestSlice = *max_element(pizzaBox.begin(), pizzaBox.end());

(обратите внимание, что max_element возвращает итератор , поэтому я разыменую возвращаемое значение перед присвоением biggestSlice.)

Это, конечно, больше не работает (= приводит к неопределенному поведению), когда вектор пуст. Вы должны проверить это явно перед тем, как разыменовывает возвращаемое значение функции.

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