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
10 / 10 / 4 Регистрация: 11.10.2012 Сообщений: 93 |
|
1 |
|
Найти минимальные в векторе16.11.2012, 14:21. Показов 12364. Ответов 13
в векторе n элементов, необходимо сделать следующее — находить минимальное среди элементов таким образом: b1,min(b1,b2),min(b1,b2,b3)…min(bn).
0 |
Kuzia domovenok 4023 / 3280 / 920 Регистрация: 25.03.2012 Сообщений: 12,263 Записей в блоге: 1 |
||||
16.11.2012, 14:27 |
2 |
|||
не понял каким образом?
0 |
gray_fox What a waste! 1607 / 1299 / 180 Регистрация: 21.04.2012 Сообщений: 2,727 |
||||
16.11.2012, 14:40 |
3 |
|||
snw, так?
http://ideone.com/rCjkIJ
1 |
10 / 10 / 4 Регистрация: 11.10.2012 Сообщений: 93 |
|
16.11.2012, 14:41 [ТС] |
4 |
Как я сам понял надо в каждый последующий элемент вектора, помещать минимальный элемент, из числа элементов, которое зависит от порядкового номера поэтому так —
0 |
gray_fox What a waste! 1607 / 1299 / 180 Регистрация: 21.04.2012 Сообщений: 2,727 |
||||
16.11.2012, 14:43 |
5 |
|||
http://ideone.com/rCjkIJ
1 |
I.M. 574 / 557 / 47 Регистрация: 16.12.2011 Сообщений: 1,389 |
||||||||
16.11.2012, 14:44 |
6 |
|||||||
gray_fox, странное сочетание
и
какое-то непоследовательное использование STL
0 |
What a waste! 1607 / 1299 / 180 Регистрация: 21.04.2012 Сообщений: 2,727 |
|
16.11.2012, 14:48 |
7 |
какое-то непоследовательное использование STL Не совсем понял. Последовательно — это с std::vector, или как? Добавлено через 1 минуту
0 |
574 / 557 / 47 Регистрация: 16.12.2011 Сообщений: 1,389 |
|
16.11.2012, 14:49 |
8 |
gray_fox, угу, std::vector или std::array. Смотря что нужно от контейнера + итераторы. Хотя на итераторах не настаиваю
0 |
What a waste! 1607 / 1299 / 180 Регистрация: 21.04.2012 Сообщений: 2,727 |
|
16.11.2012, 14:52 |
9 |
std::array Ну это C++11-only, как и список инициализации.
0 |
snw 10 / 10 / 4 Регистрация: 11.10.2012 Сообщений: 93 |
||||
16.11.2012, 17:24 [ТС] |
10 |
|||
А по поводу итераторов, я пытался сделать через них, но выскакивает ошибка — vector iterator not incrementable Так не идет Добавлено через 39 минут
0 |
gray_fox What a waste! 1607 / 1299 / 180 Регистрация: 21.04.2012 Сообщений: 2,727 |
||||
16.11.2012, 17:35 |
11 |
|||
Попробуй так:
1 |
4023 / 3280 / 920 Регистрация: 25.03.2012 Сообщений: 12,263 Записей в блоге: 1 |
|
16.11.2012, 17:42 |
12 |
Попробуй так: Человек только начинает программировать, и начинать это следует с переменных и действий над ними,
0 |
What a waste! 1607 / 1299 / 180 Регистрация: 21.04.2012 Сообщений: 2,727 |
|
16.11.2012, 17:47 |
13 |
Kuzia domovenok, : я просто поправил его код, и там тоже было это ваше СТЛ.
0 |
snw 10 / 10 / 4 Регистрация: 11.10.2012 Сообщений: 93 |
||||
19.11.2012, 14:18 [ТС] |
14 |
|||
положить в вектор vec, данные находящиеся по адресу *cIt.
0 |
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