Trouver la valeur maximale dans le tableau en C++
- Utilisez la méthode itérative pour trouver la valeur maximale dans un tableau C++
-
Utilisez l’algorithme
std::max_element
pour trouver la valeur maximale dans un tableau C++ -
Utilisez l’algorithme
std::minmax_element
pour trouver la valeur maximale dans un tableau C++
Cet article présentera comment trouver la valeur maximale dans un tableau en C++.
Utilisez la méthode itérative pour trouver la valeur maximale dans un tableau C++
Le moyen simple d’implémenter une fonction personnalisée pour la recherche de valeur maximale consiste à utiliser la méthode itérative. L’exemple de code suivant a la structure de boucle for
qui parcourt chaque élément du tableau et vérifie si la valeur actuelle est supérieure à la valeur maximale actuelle. Notez que la valeur maximale actuelle est initialisée avec la valeur du premier élément du tableau et modifiée lorsque la condition if
évalue vrai.
#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;
}
Production:
Maximum element is: 2147460568
FindMax: 0.00017500 sec
Utilisez l’algorithme std::max_element
pour trouver la valeur maximale dans un tableau C++
std::max_element
est une autre méthode pour trouver la valeur maximale dans la plage donnée. Cela fait partie des algorithmes STL, et la surcharge la plus simple ne prend que deux itérateurs pour désigner les limites de plage à rechercher. std::max_element
renvoie un itérateur sur l’élément de valeur maximale. Si plusieurs éléments ont la même valeur et sont simultanément des maximums, la fonction renvoie l’itérateur qui pointe vers le premier.
#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;
}
Production:
Maximum element is: 2147413532
FindMax2: 0.00023700 sec
Utilisez l’algorithme std::minmax_element
pour trouver la valeur maximale dans un tableau C++
Alternativement, nous pouvons utiliser l’algorithme std::minmax_element
de STL pour trouver les éléments minimum et maximum dans la plage donnée et les renvoyer sous la forme std::pair
. La fonction minmax_element
peut éventuellement prendre une fonction de comparaison binaire personnalisée comme troisième argument. Sinon, il a les mêmes paramètres que le max_element
et il se comporte de la même façon lorsque plusieurs éléments min/max se trouvent dans la plage.
#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;
}
Production:
MIN element is: 3843393 MAX element is: 2147251693
FindMinMax: 0.00000400 sec
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