[STL] std::ranges::findC++/STL2024. 6. 23. 23:07
Table of Contents
1. 개요
std::ranges::find 함수는 C++20에서 도입된 범위 기반 알고리즘으로, 지정된 범위 내에서 특정 값을 찾는다.
1.1. std::find VS std::ranges::find
1.1.1. std::find 예시
#include <algorithm> // std::find
#include <vector>
#include <iostream>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// std::find를 사용하여 값 5를 찾기
auto it = std::find(numbers.begin(), numbers.end(), 5);
if (it != numbers.end()) {
std::cout << "값을 찾았습니다: " << *it << std::endl;
} else {
std::cout << "값을 찾지 못했습니다." << std::endl;
}
return 0;
}
1.1.2. std::ranges::find
#include <ranges> // std::ranges::find
#include <vector>
#include <iostream>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
// std::ranges::find를 사용하여 값 5를 찾기
auto it = std::ranges::find(numbers, 5);
if (it != numbers.end()) {
std::cout << "값을 찾았습니다: " << *it << std::endl;
} else {
std::cout << "값을 찾지 못했습니다." << std::endl;
}
return 0;
}
2. template
2.1. 범위 기반 입력
template<ranges::input_range R, class T>
requires equality_comparable_with<ranges::range_value_t<R>, T>
constexpr ranges::borrowed_iterator_t<R> find(R&& r, const T& value);
- R: 입력 범위의 타입이다.
- value: 찾고자 하는 값이다..
- 범위 전체를 첫 번째 인수로 받아들이며, 범위의 모든 요소를 순차적으로 검색한다.
- ranges::input_range: 입력 범위 개념을 만족해야 한다.
- 반환값: 찾는 값이 있으면 해당 값을 가리키는 반복자, 없으면 범위의 끝을 나타내는 반복자를 반환한다.
2.2. 반복자 기반 입력
template<class I, class S, class T>
requires sentinel_for<S, I> && input_iterator<I> &&
equality_comparable_with<iter_value_t<I>, T>
constexpr I find(I first, S last, const T& value);
- I: 입력 범위의 시작 반복자 타입이다.
- S: 입력 범위의 끝 반복자 타입이다.
- value: 찾고자 하는 값이다.
- 전통적인 반복자 범위(first와 last)를 받아들여 검색한다.
- sentinel_for<S, I>: S가 I의 센티넬(끝을 나타내는 반복자)로 사용될 수 있어야 한다.
- input_iterator<I>: I가 입력 반복자 개념을 만족해야 한다.
- 반환값: 찾는 값이 있으면 해당 값을 가리키는 반복자, 없으면 범위의 끝을 나타내는 반복자를 반환한다.
3. 사용 예시
3.1. 범위 기반 입력
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
auto it = std::ranges::find(numbers, 5);
if (it != numbers.end()) {
std::cout << "값을 찾았습니다: " << *it << std::endl;
} else {
std::cout << "값을 찾지 못했습니다." << std::endl;
}
return 0;
}
3.2. 반복자 기반 입력
#include <iostream>
#include <vector>
#include <ranges>
int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5, 6, 7, 8, 9};
auto it = std::ranges::find(numbers.begin(), numbers.end(), 5);
if (it != numbers.end()) {
std::cout << "값을 찾았습니다: " << *it << std::endl;
} else {
std::cout << "값을 찾지 못했습니다." << std::endl;
}
return 0;
}
4. 참고사항
4.1. 관련 문서
https://en.cppreference.com/w/cpp/algorithm/ranges/find
728x90
@rlozlr :: 얼렁뚱땅 개발자
얼렁뚱땅 주니어 개발자
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!