algorithm 헤더에 정의된 함수로 배열이나 vector의 특정 범위 내에서 특정 원소의 위치를 알고 싶을때 find() 함수를 사용하면 된다.
특정 범위 내에서 원하는 값을 찾고, 찾으려는 값과 일치하는 첫 번째 원소의 반복자(iterator)를 반환하는 함수이다. 만약 값을 찾지 못했다면, 범위의 끝을 가리키는 반복자를 반환한다.
#include <iostream>
#include <vector>
#include <string>
#include <algorithm> // find를 사용하기 위해 필요
int main() {
std::vector<int> v = {10, 20, 30, 40, 50};
int target = 30;
// v.begin()부터 v.end()까지의 범위에서 target(30)을 찾는다.
auto it = std::find(v.begin(), v.end(), target);
// 찾았는지 확인
if (it != v.end()) {
// 찾았으면 해당 위치의 값을 출력
std::cout << "값을 찾았습니다: " << *it << std::endl;
// 해당 위치의 인덱스도 계산 가능
std::cout << "인덱스: " << std::distance(v.begin(), it) << std::endl;
} else {
// 못 찾았으면 v.end()와 같은 이터레이터가 반환됨
std::cout << "값을 찾지 못했습니다." << std::endl;
}
// 문자열에서도 동일하게 사용 가능
std::string s = "Hello, World!";
auto char_it = std::find(s.begin(), s.end(), 'W');
if (char_it != s.end()) {
std::cout << "\n문자를 찾았습니다: " << *char_it << std::endl;
}
}
실행 결과:
값을 찾았습니다: 30
인덱스: 2
문자를 찾았습니다: W
만약 인덱스를 int로 얻고 싶다면,
int idx = find(v.begin(),v.end(),target) - v.begin();
와 같이 사용하면 된다.