Есть ли альтернатива for?

103
04 марта 2022, 15:50

Мне нужно вывести максимальное число из динамического массива, а как это сделать я понятия не имею. Цикл for не удобен.

setlocale(LC_ALL, "ru");
cout << "Ввведите количество гор" << endl;
uint16_t size = 0;
cin >> size;
int* pointer = new int[size];
cout << "Теперь введите высоты этих гор" << endl;
for (int counter = 0; counter < size; counter++) 
    cin >> *(pointer + counter);

delete[] pointer;
Answer 1

А вы сразу, не плодя лишних циклов...

int maxval = std::numeric_limits<int>::min();
for (int counter = 0; counter < size; counter++) 
{
    cin >> *(pointer + counter);
    if (*(pointer + counter) > maxval) maxval = *(pointer + counter);
}
cout << maxval;

Можно чуууточку проще:

int maxval = std::numeric_limits<int>::min();
for (int x, counter = 0; counter < size; counter++) 
{
    cin >> x;
    if ((pointer[counter] = x) > maxval) maxval = x;
}
cout << maxval;

Ну, или, как я говорил в комментарии -

cout << *max_element(pointer,pointer+size);
Answer 2

Сразу при инициализации можете найти максимальный элемент (смотр. ответ от Harry). А если хотите потом, то у вас же есть размер массива size. Вот и используйте:

//так как это высота гор, то все числа положительные    
int  max = 0;
while (size--) {
    if (max < pointer[size])
        max = pointer[size];
}
cout << max;

А если дело дошло до стандартных контейнеров(такой ответ принят), то есть более оптимизированный контейнер для численных расчетов:

//вся ваша программа
int size;
cin >> size;
std::valarray<int> v(size);
for (int& i : v)
    cin >> i;
cout << v.max();
Answer 3

Вот с применением вектора

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> x;
  for(int i=0; i<n; i++) //ввод массива
  {
     int t;
    cin >> t;
    x.push_back(t);
  }
  int max = x[0];
  for(int y : x) //перебрать массив X
    if(y > max)
        max = y;
    cout << endl << max;
    return 0;
}

и да еще один без for :D

#include <iostream>
#include <vector>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> x;
  for(int i=0; i<n; i++)
  {
     int t;
    cin >> t;
    x.push_back(t);
  }
  int max = x[0];
  int i=0;
  while(i<x.size())
  {
    if(x[i] > max)
        max = x[i];
        i++;
  }
    cout << endl << max;
    return 0;
}
READ ALSO
Как сделать бесконечное нажатие лкм

Как сделать бесконечное нажатие лкм

Нужно нажать на лкм в той позиции в которой она находится

91
Заполнение свободного места в строке до конца строки

Заполнение свободного места в строке до конца строки

Уже задавал сегодня похожий вопросПроблему решили

93
Как перевести %20%... в utf8 на русском?

Как перевести %20%... в utf8 на русском?

Ссылка на php скриптСкрипт нормально получает параметры version и name, но text не получается, он становится таким:

84
Ошибка - TypeError: list indices must be integers or slices, not str

Ошибка - TypeError: list indices must be integers or slices, not str

Может кто подсказать как исправить?

101