Finden Sie den maximalen Wert im Array in C++

Jinku Hu 12 Oktober 2023
  1. Verwenden Sie die iterative Methode, um den maximalen Wert in einem C++-Array zu finden
  2. Verwenden Sie den std::max_element-Algorithmus, um den maximalen Wert in einem C++-Array zu finden
  3. Verwenden Sie den std::minmax_element-Algorithmus, um den maximalen Wert in einem C++-Array zu finden
Finden Sie den maximalen Wert im Array in C++

In diesem Artikel wird vorgestellt, wie Sie den maximalen Wert in einem Array in C++ finden.

Verwenden Sie die iterative Methode, um den maximalen Wert in einem C++-Array zu finden

Die einfache Methode zum Implementieren einer benutzerdefinierten Funktion für die Maximalwertsuche ist die Verwendung der iterativen Methode. Der folgende Beispielcode hat die Schleifenstruktur for, die jedes Element des Arrays durchläuft und prüft, ob der aktuelle Wert größer als der aktuelle Maximalwert ist. Beachten Sie, dass der aktuelle Maximalwert mit dem Wert des ersten Elements im Array initialisiert und geändert wird, wenn die if-Bedingung wahr ist.

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;

void generateNumbers(int arr[], size_t &width) {
  std::srand(std::time(nullptr));
  for (size_t i = 0; i < width; i++) {
    arr[i] = std::rand();
  }
}

template <typename T>
T FindMax(T *arr, size_t n) {
  int max = arr[0];

  for (size_t j = 0; j < n; ++j) {
    if (arr[j] > max) {
      max = arr[j];
    }
  }
  return max;
}

float time_diff(struct timeval *start, struct timeval *end) {
  return (end->tv_sec - start->tv_sec) + 1e-6 * (end->tv_usec - start->tv_usec);
}

int main() {
  struct timeval start {};
  struct timeval end {};

  size_t width = 100000;
  int *arr = new int[width];

  generateNumbers(arr, width);

  gettimeofday(&start, nullptr);
  cout << "Maximum element is: " << FindMax(arr, width) << endl;
  gettimeofday(&end, nullptr);

  printf("FindMax: %0.8f sec\n", time_diff(&start, &end));

  delete[] arr;
  return EXIT_SUCCESS;
}

Ausgabe:

Maximum element is: 2147460568
FindMax: 0.00017500 sec

Verwenden Sie den std::max_element-Algorithmus, um den maximalen Wert in einem C++-Array zu finden

std::max_element ist eine weitere Methode, um den Maximalwert im angegebenen Bereich zu finden. Es ist Teil der STL-Algorithmen, und die einfachste Überladung benötigt nur zwei Iteratoren, um Bereichsgrenzen anzugeben, nach denen gesucht werden soll. std::max_element gibt einen Iterator zum Maximalwertelement zurück. Wenn mehrere Elemente denselben Wert haben und gleichzeitig Maxima sind, gibt die Funktion den Iterator zurück, der auf das erste zeigt.

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;

void generateNumbers(int arr[], size_t &width) {
  std::srand(std::time(nullptr));
  for (size_t i = 0; i < width; i++) {
    arr[i] = std::rand();
  }
}

template <typename T>
T FindMax2(T *arr, size_t n) {
  return *std::max_element(arr, arr + n);
}

float time_diff(struct timeval *start, struct timeval *end) {
  return (end->tv_sec - start->tv_sec) + 1e-6 * (end->tv_usec - start->tv_usec);
}

int main() {
  struct timeval start {};
  struct timeval end {};

  size_t width = 100000;
  int *arr = new int[width];

  generateNumbers(arr, width);

  gettimeofday(&start, nullptr);
  cout << "Maximum element is: " << FindMax2(arr, width) << endl;
  gettimeofday(&end, nullptr);

  printf("FindMax2: %0.8f sec\n", time_diff(&start, &end));

  delete[] arr;
  return EXIT_SUCCESS;
}

Ausgabe:

Maximum element is: 2147413532
FindMax2: 0.00023700 sec

Verwenden Sie den std::minmax_element-Algorithmus, um den maximalen Wert in einem C++-Array zu finden

Alternativ können wir den std::minmax_element-Algorithmus von STL verwenden, um sowohl minimale als auch maximale Elemente im angegebenen Bereich zu finden und als std::pair zurückzugeben. Die Funktion minmax_element kann optional eine benutzerdefinierte binäre Vergleichsfunktion als drittes Argument verwenden. Ansonsten hat es die gleichen Parameter wie das max_element und verhält sich ähnlich, wenn mehrere min/max-Elemente im Bereich gefunden werden.

#include <sys/time.h>

#include <ctime>
#include <iostream>

using std::cout;
using std::endl;

void generateNumbers(int arr[], size_t &width) {
  std::srand(std::time(nullptr));
  for (size_t i = 0; i < width; i++) {
    arr[i] = std::rand();
  }
}

template <typename T>
auto FindMinMax(T *arr, size_t n) {
  return std::minmax_element(arr, arr + n);
}

float time_diff(struct timeval *start, struct timeval *end) {
  return (end->tv_sec - start->tv_sec) + 1e-6 * (end->tv_usec - start->tv_usec);
}

int main() {
  struct timeval start {};
  struct timeval end {};

  size_t width = 100000;
  int *arr = new int[width];

  generateNumbers(arr, width);

  gettimeofday(&start, nullptr);
  auto ret = FindMinMax(arr, width);
  gettimeofday(&end, nullptr);
  cout << "MIN element is: " << *ret.first << " MAX element is: " << *ret.second
       << endl;

  printf("FindMinMax: %0.8f sec\n", time_diff(&start, &end));

  delete[] arr;
  return EXIT_SUCCESS;
}

Ausgabe:

MIN element is: 3843393 MAX element is: 2147251693
FindMinMax: 0.00000400 sec
Autor: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn Facebook

Verwandter Artikel - C++ Array