How can I find the minimum value from a vector?
int main()
{
int v[100] = { 5, 14, 2, 4, 6 };
int n = 5;
int mic = v[0];
enter code here
for (int i=0; i < v[n]; i++)
{
if (v[i] < mic)
mic = v[i];
}
cout< < mic;
}
But is not working, what can I do?
AustinWBryan
3,2493 gold badges23 silver badges42 bronze badges
asked Oct 22, 2012 at 16:44
4
See std::min_element.
Examples:
std::min_element(vec.begin(), vec.end()); // STL containers.
std::min_element(v, v + n); // C style arrays where n is the number of elements.
std::min_element(std::begin(v), std::end(v)); // STL containers and C style arrays.
Note that for the last option, it is better to apply the ‘std 2-step’ pattern so it works for user-defined types as well as standard library types:
using std::begin, std::end; // Enables argument-dependent lookup: https://en.cppreference.com/w/cpp/language/adl
std::min_element(begin(v), end(v));
Since C++20, we can also use ranges to avoid having to call begin/end manually:
std::ranges::min_element(v);
answered Oct 22, 2012 at 16:48
zabuluszabulus
2,3533 gold badges15 silver badges27 bronze badges
7
You can always use the stl:
auto min_value = *std::min_element(v.begin(),v.end());
Humam Helfawi
19.4k14 gold badges80 silver badges159 bronze badges
answered Oct 22, 2012 at 16:58
acrubeacrube
7711 gold badge5 silver badges5 bronze badges
1
#include <iostream>
#include <vector>
#include <algorithm> // std::min_element
#include <iterator> // std::begin, std::end
int main() {
std::vector<int> v = {5,14,2,4,6};
auto result = std::min_element(std::begin(v), std::end(v));
if (std::end(v)!=result)
std::cout << *result << 'n';
}
The program you show has a few problems, the primary culprit being the for
condition: i<v[n]
. You initialize the array, setting the first 5 elements to various values and the rest to zero. n
is set to the number of elements you explicitly initialized so v[n]
is the first element that was implicitly initialized to zero. Therefore the loop condition is false the first time around and the loop does not run at all; your code simply prints out the first element.
Some minor issues:
-
avoid raw arrays; they behave strangely and inconsistently (e.g., implicit conversion to pointer to the array’s first element, can’t be assigned, can’t be passed to/returned from functions by value)
-
avoid magic numbers.
int v[100]
is an invitation to a bug if you want your array to get input from somewhere and then try to handle more than 100 elements. -
avoid
using namespace std;
It’s not a big deal in implementation files, although IMO it’s better to just get used to explicit qualification, but it can cause problems if you blindly use it everywhere because you’ll put it in header files and start causing unnecessary name conflicts.
answered Oct 22, 2012 at 16:48
bames53bames53
85.5k15 gold badges177 silver badges243 bronze badges
2
You have an error in your code. This line:
for (int i = 0;i < v[n]; i++)
should be
for (int i = 0;i < n; i++)
because you want to search n
places in your vector, not v[n]
places (which wouldn’t mean anything)
AustinWBryan
3,2493 gold badges23 silver badges42 bronze badges
answered Oct 22, 2012 at 16:49
alestanisalestanis
21.5k4 gold badges47 silver badges66 bronze badges
1
template <class ForwardIterator>
ForwardIterator min_element ( ForwardIterator first, ForwardIterator last )
{
ForwardIterator lowest = first;
if (first == last)
return last;
while (++first != last)
if (*first < *lowest)
lowest = first;
return lowest;
}
AustinWBryan
3,2493 gold badges23 silver badges42 bronze badges
answered Oct 22, 2012 at 17:26
lovayalovaya
4353 silver badges3 bronze badges
1
Try this with
std::min_element(v.begin(),v.end())
answered Oct 22, 2012 at 16:49
Rahul TripathiRahul Tripathi
167k31 gold badges277 silver badges330 bronze badges
#include <iostream>
int main()
{
int v[100] = {5,14,2,4,6};
int n = 5;
int mic = v[0];
for(int i = 0; i != n; ++i)
{
if(v[i] < mic)
mic = v[i];
}
std:cout << mic << std::endl;;
}
answered Oct 22, 2012 at 17:30
lovayalovaya
4353 silver badges3 bronze badges
В этом посте мы обсудим, как найти минимальное или максимальное значение в векторе на C++.
1. Использование std::max_element
The std::min_element
а также std::max_element
вернуть итератору минимальное и максимальное значение в указанном диапазоне соответственно. В следующем примере кода показан вызов обеих этих функций:
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {2, 1, 3, 6, 7, 9, 8}; int max = *max_element(v.begin(), v.end()); int min = *min_element(v.begin(), v.end()); std::cout << min << «, « << max << std::endl; // 1, 9 return 0; } |
Скачать Выполнить код
Обе эти функции принимают бинарный предикат, который можно использовать для сравнения вектора объектов с использованием определенного поля, как показано ниже:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#include <iostream> #include <vector> #include <algorithm> struct Person { std::string name; int age; }; bool comp(Person const &lhs, Person const &rhs) { return lhs.age < rhs.age; } int main() { std::vector<Person> v = { {«A», 10}, {«B», 15}, {«C», 12}, {«D», 14} }; auto min = std::min_element(v.begin(), v.end(), comp); auto max = std::max_element(v.begin(), v.end(), comp); std::cout << «Minimum age object: (« << min->name << «, « << min->age << «)n»; std::cout << «Maximum age object: (« << max->name << «, « << max->age << «)n»; return 0; } |
Скачать Выполнить код
результат:
Minimum age object: (A, 10)
Maximum age object: (B, 15)
2. Использование std::minmax_element
Лучшим вариантом является использование std::minmax_element
функция для получения минимального и максимального количества элементов в контейнере. Он возвращает пару итераторов, первое и второе значения которых указывают на минимальный и максимальный элементы соответственно.
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {2, 1, 3, 6, 7, 9, 8}; auto it = std::minmax_element(v.begin(), v.end()); int min = *it.first; int max = *it.second; std::cout << min << «, « << max << std::endl; // 1, 9 return 0; } |
Скачать Выполнить код
Чтобы получить индекс элементов с максимальным или минимальным значением, примените арифметику указателя или вызовите std::distance
функция.
#include <iostream> #include <vector> #include <algorithm> int main() { std::vector<int> v = {2, 1, 3, 6, 7, 9, 8}; auto it = std::minmax_element(v.begin(), v.end()); int min_idx = std::distance(v.begin(), it.first); int max_idx = std::distance(v.begin(), it.second); std::cout << min_idx << «, « << max_idx << std::endl; // 1, 5 return 0; } |
Скачать Выполнить код
3. Использование пользовательской процедуры
Наконец, мы можем написать вашу собственную процедуру, чтобы найти минимальное и максимальное значение в векторе. Вот как будет выглядеть код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
#include <iostream> #include <vector> #include <climits> template<typename T> int findMaximum(std::vector<T> const &vec) { int max = INT_MIN; for (const T &i: vec) { if (max < i) { max = i; } } return max; } template<typename T> int findMinimum(std::vector<T> const &vec) { int min = INT_MAX; for (const T &i: vec) { if (min > i) { min = i; } } return min; } int main() { std::vector<int> v = {2, 1, 3, 6, 7, 9, 8}; int min = findMinimum(v); int max = findMaximum(v); std::cout << min << «, « << max << std::endl; // 1, 9 return 0; } |
Скачать Выполнить код
Это все о поиске минимального или максимального значения в векторе в C++.
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования
Improve Article
Save Article
Like Article
Improve Article
Save Article
Like Article
Given a vector, find the minimum and maximum element of this vector using STL in C++. Example:
Input: {1, 45, 54, 71, 76, 12} Output: min = 1, max = 76 Input: {10, 7, 5, 4, 6, 12} Output: min = 1, max = 76
Approach:
- Min or Minimum element can be found with the help of *min_element() function provided in STL.
- Max or Maximum element can be found with the help of *max_element() function provided in STL.
Syntax:
*min_element (first_index, last_index); *max_element (first_index, last_index);
Below is the implementation of the above approach:
CPP
#include <bits/stdc++.h>
using
namespace
std;
int
main()
{
vector<
int
> a = { 1, 45, 54, 71, 76, 12 };
cout <<
"Vector: "
;
for
(
int
i = 0; i < a.size(); i++)
cout << a[i] <<
" "
;
cout << endl;
cout <<
"nMin Element = "
<< *min_element(a.begin(), a.end());
cout <<
"nMax Element = "
<< *max_element(a.begin(), a.end());
return
0;
}
Output:
Vector: 1 45 54 71 76 12 Min Element = 1 Max Element = 76
Time Complexity: O(N)
Auxiliary Space: O(1)
Last Updated :
07 Jul, 2022
Like Article
Save Article
Example
To find the largest or smallest element stored in a vector, you can use the methods std::max_element
and std::min_element
, respectively. These methods are defined in <algorithm>
header. If several elements are equivalent to the greatest (smallest) element, the methods return the iterator to the first such element. Return v.end()
for empty vectors.
std::vector<int> v = {5, 2, 8, 10, 9};
int maxElementIndex = std::max_element(v.begin(),v.end()) - v.begin();
int maxElement = *std::max_element(v.begin(), v.end());
int minElementIndex = std::min_element(v.begin(),v.end()) - v.begin();
int minElement = *std::min_element(v.begin(), v.end());
std::cout << "maxElementIndex:" << maxElementIndex << ", maxElement:" << maxElement << 'n';
std::cout << "minElementIndex:" << minElementIndex << ", minElement:" << minElement << 'n';
Output:
maxElementIndex:3, maxElement:10
minElementIndex:1, minElement:2
C++11
The minimum and maximum element in a vector can be retrieved at the same time by using the method std::minmax_element
, which is also defined in <algorithm>
header:
std::vector<int> v = {5, 2, 8, 10, 9};
auto minmax = std::minmax_element(v.begin(), v.end());
std::cout << "minimum element: " << *minmax.first << 'n';
std::cout << "maximum element: " << *minmax.second << 'n';
Output:
minimum element: 2
maximum element: 10
std::min_element
Определено в заголовке <algorithm> |
||
---|---|---|
(1) | ||
template< class ForwardIt >
ForwardIt min_element( ForwardIt first, ForwardIt last );
|
(until C++17) | |
template< class ForwardIt >
constexpr ForwardIt min_element( ForwardIt first, ForwardIt last );
|
(since C++17) | |
template< class ExecutionPolicy, class ForwardIt >
ForwardIt min_element( ExecutionPolicy&& policy,
ForwardIt first, ForwardIt last );
|
(2) | (since C++17) |
(3) | ||
template< class ForwardIt, class Compare >
ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );
|
(until C++17) | |
template< class ForwardIt, class Compare >
constexpr ForwardIt min_element( ForwardIt first, ForwardIt last, Compare comp );
|
(since C++17) | |
template< class ExecutionPolicy, class ForwardIt, class Compare > ForwardIt min_element( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, Compare comp ); |
(4) | (since C++17) |
Находит наименьший элемент в диапазоне [first, last)
.
1) Элементы сравниваются с использованием operator<
.
3) Элементы сравниваются с использованием заданной двоичной функции сравнения comp
.
Parameters
first, last | — | форвардные итераторы,определяющие диапазон для изучения |
policy | — | политика выполнения для использования. См. Политику выполнения для деталей. |
comp | — | функция сравнения объект (т.е. объект , который удовлетворяет требованиям сравнения ) , который возвращает true если является a lessthan b .
Подпись функции сравнения должна быть эквивалентна следующей:
Хотя подпись не должна иметь |
Type requirements | ||
— ForwardIt должен соответствовать требованиям LegacyForwardIterator . |
Return value
Итератор для наименьшего элемента в диапазоне [first, last)
. Если несколько элементов в диапазоне эквивалентны наименьшему элементу, возвращается итератор к первому такому элементу. Возвращает last
если диапазон пуст.
Complexity
Ровно max(N-1,0) сравнений, где N = std::distance(first, last)
.
Exceptions
Перегрузки с параметром шаблона с именем ExecutionPolicy
сообщают об ошибках следующим образом:
- Если выполнение функции, вызванной как часть алгоритма, вызывает исключение, и
ExecutionPolicy
является одной из стандартных политик , вызываетсяstd::terminate
. Для любого другогоExecutionPolicy
поведение определяется реализацией. - Если алгоритму не удается выделить память,
std::bad_alloc
.
Possible implementation
First version |
---|
template<class ForwardIt> ForwardIt min_element(ForwardIt first, ForwardIt last) { if (first == last) return last; ForwardIt smallest = first; ++first; for (; first != last; ++first) { if (*first < *smallest) { smallest = first; } } return smallest; } |
Second version |
template<class ForwardIt, class Compare> ForwardIt min_element(ForwardIt first, ForwardIt last, Compare comp) { if (first == last) return last; ForwardIt smallest = first; ++first; for (; first != last; ++first) { if (comp(*first, *smallest)) { smallest = first; } } return smallest; } |
Example
#include <algorithm> #include <iostream> #include <vector> int main() { std::vector<int> v{3, 1, 4, 1, 5, 9}; std::vector<int>::iterator result = std::min_element(v.begin(), v.end()); std::cout << "min element at: " << std::distance(v.begin(), result); }
Output:
See also
возвращает самый большой элемент в ассортименте (function template) |
|
(C++11) |
возвращает самые маленькие и большие элементы в диапазоне (function template) |
возвращает меньшее из заданных значений (function template) |
|
(C++20) |
возвращает наименьший элемент в диапазоне (niebloid) |
C++
-
std::merge
Объединяет два отсортированных диапазона [first1,last1)и [first2,last2)в один,начинающийся с d_first.
-
std::min
Возвращает меньшее из заданных значений.
-
std::minmax
Возвращает наименьшее и наибольшее из заданных значений.
-
std::minmax_element
Находит наименьший и наибольший диапазон элементов [first,last).