[Basic C++] #43_STL 알고리즘, find, find_if

2022. 7. 5. 08:21· 언어/Basic C++
목차
  1.  
  2. [Basic C++] #43_STL 알고리즘, find, find_if

 

[Basic C++] #43_STL 알고리즘, find, find_if

 

STL 알고리즘 중 "find", 그리고 "find_if"에 대해 알아보겠습니다.

"전문가를 위한 C"의 17 항목, "STL 알고리즘 마스터하기"에 해당하는 내용입니다.

 


 

Overview

 

  1. 개념
  2. find()
  3. find_if()

 

#0. 개념

1. find()?

template<class InputIterator, class T>
InputIterator find(InputIterator first, InputIterator last, const T& val);

 

  • STL 알고리즘 중 "find()" 메서드를 먼저 살펴보겠습니다.
  • 앞선 포스팅에서 살펴봤듯이 STL이 제공하는 컨테이너들은 "반복자"를 매개로 제네릭 알고리즘을 수행합니다.
  • 그중 "find()" 메서드는 지정 구간 안에서 특정 항목 값을 찾습니다.
  • 인자로 구간의 첫 번째와 마지막 반복자, 그리고 찾고자 하는 항목 값을 받습니다.
  • "find()" 메서드의 반환 값은 특정 항목을 찾았을 경우 그 항목을 가리키는 반복자를 반환하며, 찾지 못했을 경우 컨테이너의 "end()"를 반환합니다.
  • * 주의 : 반환 값이 boolean이 아니라 반복자인 것을 명심합시다!

 

#1. find() 예제

1. 예제 코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int main()
{
	ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);

	int num;
	vector <int> v;

	v.push_back(30);
	v.push_back(46);
	v.push_back(100);
	v.push_back(50);
	v.push_back(95);
	v.push_back(93);

	while (true)
	{
		cout << "Enter a number to lookup (0 to stop)" << '\n';
		cin >> num;
		if (num == 0)
			break;

		auto p = find(cbegin(v), cend(v), num);

		if (p == cend(v))
			cout << "없어용" << '\n';
		else
			cout << "있어용" << " " << *p << '\n';

	}
}

 

#2. find_if() 예제

1. find_if()?

template <class InputIterator, class UnaryPredicate>
InputIterator find_if(InputIterator first, InputIterator last, UnaryPredicate pred);

 

  • "find_if()" 메서드는 "find()" 메서드와 다릅니다.
  • "find_if()" 메서드는 마지막 인자로 찾고자 하는 특정 항목을 받지 않고, 선택용 콜백 함수(Predicate funciton callback)를 받습니다.
  • 이때, 프레디킷은 사용자가 직접 작성하는 함수로 단항 혹은 이항 조건자를 반환하여 지정된 구간 안에서 항목 값이 조건과 합치하는지 체크하고, 가장 먼저 합치하는 항목의 반복자를 반환하고 종료합니다.

 

2. 예제 코드

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool Pred(int n)
{
	return n >= 100;
}

int main()
{
	ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);

	int num;
	vector <int> v;

	v.push_back(30);
	v.push_back(46);
	v.push_back(35);
	v.push_back(50);
	v.push_back(95);
	v.push_back(93);

	auto p = find_if(cbegin(v), cend(v), Pred);

	if (p == cend(v))
		cout << "없어용" << endl;
	else
		cout << "있어용" << " " << endl;

}

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

bool Pred(int n)
{
	return n >= 100;
}

int main()
{
	ios_base::sync_with_stdio(false); cout.tie(NULL); cin.tie(NULL);

	int num;
	vector <int> v;

	v.push_back(30);
	v.push_back(46);
	v.push_back(35);
	v.push_back(50);
	v.push_back(95);
	v.push_back(100);

	auto p = find_if(cbegin(v), cend(v), Pred);

	if (p == cend(v))
		cout << "없어용" << endl;
	else
		cout << "있어용" << " " << endl;

}

 

 

 

'언어 > Basic C++' 카테고리의 다른 글

[Basic C++] #45_람다 표현식 활용, 제네릭 람다 표현식, 람다 캡처 표현식, 리턴 타입으로서 람다 표현식  (0) 2022.07.06
[Basic C++] #44_람다 표현식, 기본  (0) 2022.07.05
[Basic C++] #42_unordered_multimap, 비순차 연관 컨테이너, 중복 허용  (0) 2022.06.28
[Basic C++] #41_unordered_map, 비순차 연관 컨테이너  (0) 2022.06.28
[Basic C++] #40_해시함수, 비순차 연관 컨테이너, 해시 테이블  (0) 2022.06.24
  1.  
  2. [Basic C++] #43_STL 알고리즘, find, find_if
'언어/Basic C++' 카테고리의 다른 글
  • [Basic C++] #45_람다 표현식 활용, 제네릭 람다 표현식, 람다 캡처 표현식, 리턴 타입으로서 람다 표현식
  • [Basic C++] #44_람다 표현식, 기본
  • [Basic C++] #42_unordered_multimap, 비순차 연관 컨테이너, 중복 허용
  • [Basic C++] #41_unordered_map, 비순차 연관 컨테이너
Hardii2
Hardii2
Hardii2
개발 블로그
Hardii2
전체
오늘
어제
  • 분류 전체보기
    • 알고리즘
    • 웹 개발
      • Node.js
      • React
    • 게임개발
      • DirectX12
      • 관련 지식
      • Unreal C++
      • Unreal 블루프린트
    • 언어
      • Effective C++
      • Basic C++
      • 디자인 패턴
      • 자료구조
      • 기술 질문
    • 문제 풀이
      • BOJ 문제 풀이
      • Programmers 문제 풀이
      • geeksForgeeks 문제 풀이
    • 수학
      • 확률과 통계
      • 게임수학
    • 개인프로젝트
    • 그룹프로젝트
      • PM
      • Dev
    • Github

블로그 메뉴

  • 홈
  • 글쓰기

공지사항

인기 글

태그

  • 디자인 패턴
  • 트리
  • 그래프
  • 우선순위 큐
  • stl
  • C++
  • 정렬
  • programmers
  • 최단 경로
  • dfs
  • 기술 질문
  • BOJ
  • set
  • Effective C++
  • 알고리즘
  • BFS
  • DP
  • unreal
  • Unreal Blueprint
  • 개발

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.2
Hardii2
[Basic C++] #43_STL 알고리즘, find, find_if
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.