C++
[C++] max_element, min_element, find
dh_0e
2024. 7. 12. 00:11
max_element, min_element
- 배열, 벡터, 리스트 등의 최댓값(max_element), 최솟값(min_element)을 찾을 때 사용
- <algorithm> 라이브러리에 있으며, 최댓값 or 최솟값을 가리키는 반복자를 반환함
- 시간 복잡도: O(n)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> vec={1, 2, 3, 4, 5, 6};
printf("vec의 최솟값: %d\n", *min_element(vec.begin(), vec.end())); // 1
printf("vec의 최댓값의 iterator: %p\n", max_element(vec.begin(), vec.end())); // 27762372(주소값)
return 0;
}
- v.begin()을 빼주면 인덱스 값을 구할 수 있음
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> vec={1, 2, 3, 4, 5, 6};
printf("vec의 최솟값의 index: %d\n", min_element(vec.begin(), vec.end())-vec.begin()); // 0
printf("vec의 최댓값의 index: %d\n", max_element(vec.begin(), vec.end())-vec.begin()); // 5
return 0;
}
find
- 컨테이너의 요소를 처음부터 끝까지 순회하며, 원하는 값을 찾을 때까지 검색
- 마찬가지로 <algorithm> 라이브러리에 있으며, 값을 찾으면 해당 값의 반복자를 반환
- 값이 존재하지 못한다면 범위의 끝을 반환
- 시간 복잡도: O(n)
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main()
{
vector<int> vec={1, 2, 3, 4, 5, 6};
int target=3;
auto it=find(vec.begin(), vec.end(), target);
printf("target의 index: %d\n", it-vec.begin()); // 2
target=0;
it=find(vec.begin(), vec.end(), target);
printf("target이 없다면 true: %d\n",it==vec.end()); // 1
return 0;
}