C ++ 에서 벡터의 최대 (또는 최소) 값을 어떻게 얻을 수 있습니까?
Google에서 이에 대한 몇 가지 해결책을 보았지만 어느 것도 나에게 의미가 없습니다.
누군가가 벡터에서 최대 또는 최소 값을 얻는 방법을 쉽고 간단하게 설명 할 수 있습니까? 그리고 그것이 배열과 다소 동일하다고 가정하는 것이 잘못입니까?
반복자가 필요합니까? 나는 그것을 시도 max_element
했지만 계속 오류가 발생합니까?
vector<int>::const_iterator it;
it = max_element(cloud.begin(), cloud.end());
오류 : 비 클래스 유형 ‘int [10]’인 ‘cloud’의 멤버 ‘begin’에 대한 요청
편집 : 나는 내 자신의 대답을 할 수 없었다 ??? 그래서 여기에 넣을 게요 …
와우, 빠른 답변 감사합니다! 나는 이런 식으로 끝내고, 괜찮다고 생각합니까?
for (unsigned int i = 0; i < cdf.size(); i++)
if (cdf[i] < cdfMin)
cdfMin = cdf[i];
cdf
벡터는 어디에 있습니까 ?
답변
C ++ 11 / c ++ 0x 컴파일 플래그를 사용하여 다음을 수행 할 수 있습니다.
auto it = max_element(std::begin(cloud), std::end(cloud)); // c++11
그렇지 않으면 직접 작성하십시오.
template <typename T, size_t N> const T* mybegin(const T (&a)[N]) { return a; }
template <typename T, size_t N> const T* myend (const T (&a)[N]) { return a+N; }
http://ideone.com/aDkhW 에서 실시간으로 확인 하세요 .
#include <iostream>
#include <algorithm>
template <typename T, size_t N> const T* mybegin(const T (&a)[N]) { return a; }
template <typename T, size_t N> const T* myend (const T (&a)[N]) { return a+N; }
int main()
{
const int cloud[] = { 1,2,3,4,-7,999,5,6 };
std::cout << *std::max_element(mybegin(cloud), myend(cloud)) << '\n';
std::cout << *std::min_element(mybegin(cloud), myend(cloud)) << '\n';
}
아, 그리고 한 번에 둘 다 필요한 경우 사용std::minmax_element(...)
하십시오 : /
답변
함수를 사용하려는 경우 std::max_element()
수행해야하는 방법은 다음과 같습니다.
double max = *max_element(vector.begin(), vector.end());
cout<<"Max value: "<<max<<endl;
도움이 되었기를 바랍니다.
답변
허락하다,
#include <vector>
vector<int> v {1, 2, 3, -1, -2, -3};
벡터가 오름차순 또는 내림차순으로 정렬 된 경우 복잡성 O (1)로 찾을 수 있습니다.
오름차순 벡터의 경우 첫 번째 요소는 가장 작은 요소이고 v [0] (0 기반 인덱싱)로 가져올 수 있고 마지막 요소는 가장 큰 요소이며 v [sizeOfVector-1]로 가져올 수 있습니다.
벡터를 내림차순으로 정렬하면 마지막 요소가 가장 작은 요소이고 v [sizeOfVector-1]로 가져올 수 있고 첫 번째 요소가 가장 큰 요소이면 v [0]으로 가져올 수 있습니다.
벡터가 정렬되지 않은 경우 가장 작은 / 가장 큰 요소를 얻기 위해 벡터를 반복해야합니다.이 경우 시간 복잡도는 O (n)이고 여기서 n은 벡터의 크기입니다.
int smallest_element = v[0]; //let, first element is the smallest one
int largest_element = v[0]; //also let, first element is the biggest one
for(int i = 1; i < v.size(); i++) //start iterating from the second element
{
if(v[i] < smallest_element)
{
smallest_element = v[i];
}
if(v[i] > largest_element)
{
largest_element = v[i];
}
}
반복자를 사용할 수 있습니다.
for (vector<int>:: iterator it = v.begin(); it != v.end(); it++)
{
if(*it < smallest_element) //used *it (with asterisk), because it's an iterator
{
smallest_element = *it;
}
if(*it > largest_element)
{
largest_element = *it;
}
}
입력 섹션에서 계산할 수 있습니다 (주어진 벡터에서 가장 작거나 가장 큰 요소를 찾아야 할 때)
int smallest_element, largest_element, value;
vector <int> v;
int n;//n is the number of elements to enter
cin >> n;
for(int i = 0;i<n;i++)
{
cin>>value;
if(i==0)
{
smallest_element= value; //smallest_element=v[0];
largest_element= value; //also, largest_element = v[0]
}
if(value<smallest_element and i>0)
{
smallest_element = value;
}
if(value>largest_element and i>0)
{
largest_element = value;
}
v.push_back(value);
}
또한 내장 함수로 가장 작은 / 가장 큰 요소를 얻을 수 있습니다.
#include<algorithm>
int smallest_element = *min_element(v.begin(),v.end());
int largest_element = *max_element(v.begin(),v.end());
이 함수를 사용하여 모든 범위의 최소 / 최대 요소를 얻을 수 있습니다. 예 :
vector<int> v {1,2,3,-1,-2,-3};
cout << *min_element(v.begin(), v.begin() + 3); //this will print 1,smallest element of first three elements
cout << *max_element(v.begin(), v.begin() + 3); //largest element of first three elements
cout << *min_element(v.begin() + 2, v.begin() + 5); // -2, smallest element between third and fifth element (inclusive)
cout << *max_element(v.begin() + 2, v.begin()+5); //largest element between third and first element (inclusive)
min_element () / max_element () 함수 앞에 별표 (*)를 사용했습니다. 둘 다 반복자를 반환하기 때문입니다. 모든 코드는 C ++로되어 있습니다.
답변
클라우드가 int cloud[10]
다음과 같이 할 수 있다고 가정 합니다.
int *p = max_element(cloud, cloud + 10);
답변
max_element / min_element 함수를 사용하여 직접 인쇄 할 수 있습니다. 예 :
cout<<*max_element(v.begin(),v.end());
cout<<*min_element(v.begin(),v.end());
답변
C ++ 11에서는 다음과 같은 기능을 사용할 수 있습니다.
int maxAt(std::vector<int>& vector_name) {
int max = INT_MIN;
for (auto val : vector_name) {
if (max < val) max = val;
}
return max;
}
답변
반복기를 사용 하려면 배열 로 새로 배치를 수행 할 수 있습니다 .
std::array<int, 10> icloud = new (cloud) std::array<int,10>;
()
마지막 에 a가 없다는 점에 유의하십시오 . 그러면 해당 메모리를 저장소로 사용하고 반복기와 같은 STL 기능이있는 배열 클래스가 생성됩니다.
(이것은 C ++ TR1 / C ++ 11입니다)