Оператор My If Else не работает для предоставления максимального значения в векторе (C ++) - PullRequest
0 голосов
/ 11 октября 2018

Я пытаюсь вернуть макс.значение в векторе в C ++, но я постоянно получаю только последнее значение в качестве ответа (я предполагаю, что это потому, что цикл if-else не выполняет сравнение, а просто присваивает следующее значение maxVal).Например, приведенный ниже код возвращает 30 в качестве ответа.Что я делаю неправильно?Можете ли вы помочь?

Ниже приведен код ->

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
#include <fstream>
#include <vector>

using namespace std;

double max (const vector<double>& myVector)   {
int n = myVector.size();
double maxVal;
for (int i=0; i<=n-1; i++) {
    if (maxVal <= myVector[i+1])  {
        maxVal = myVector[i+1];   
    }
    else {
        maxVal = myVector[i];
    }

}
return maxVal; 
}

int main() {
vector<double> testVector;
testVector.push_back(10.0);
testVector.push_back(200.0);
testVector.push_back(30.0);
cout << max(testVector);
return 0;

}

Ответы [ 4 ]

0 голосов
/ 11 октября 2018

Здесь

for (int i=0; i<=n-1; i++) {
    if (maxVal <= myVector[i+1])  {
        maxVal = myVector[i+1];   
    }
    else {
        maxVal = myVector[i];
    }
}

вы меняете значение maxVal на каждой итерации.В конце maxVal может быть либо значением последнего элемента, либо элементов, следующих за вашим массивом.Это подводит меня к следующей проблеме: Допустимые индексы - от 0 до (включая) n-1, поэтому, когда вы находитесь на i==n-1, тогда i+1 выходит за пределы вашего массива.

На самом деле нет необходимости рассматривать следующий или предыдущий элемент, поэтому измените его на

for (int i=0; i<n; i++) {        // loop from 0 till n-1 
    if (maxVal < myVector[i]) {  // no need to check equality
        maxVal = myVector[i];   
    }                            // no need for else
}                                // if maxVal is bigger then it 
                                 // is already the max so far
0 голосов
/ 11 октября 2018

C ++ имеет богатую библиотеку, и я не понимаю, почему люди не используют ее.Вот двухстрочная версия, которая находит максимальное значение вектора.Пожалуйста, не изобретай велосипед.

#include <iostream>                                                                                                                                                                                                
#include <vector>                                                                                                                                                                                                  
#include <algorithm>                                                                                                                                                                                                

int main()                                                                                                                                                                                                         
{                                                                                                                                                                                                                  
  auto v = std::vector{4, 3, 2, 1};                                                                                                                                                                               
  std::cout << *max_element(v.cbegin(), v.cend()) << "\n";                                                                                                                                                         
}                                                                                                                                                                                                                  
0 голосов
/ 11 октября 2018

Облегчите себе жизнь, используйте стандартные алгоритмы.

См. https://en.cppreference.com/w/cpp/algorithm/max_element

0 голосов
/ 11 октября 2018

(я предполагаю, что вектор не пуст)вектора, Выполнить на всех элементах, и если один больше, чем maxVal, обновите maxVal.

...