본문 바로가기

C++

std::find()

#include <iostream>
#include <vector>
#include <algorithm>

int main()
{
	std::vector<int> vec = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
	std::vector<int> sub = { 3, 4, 5 };
	std::vector<int> sub1 = { 1 ,2, 3, 3, 4, 5 };

	auto itr = std::find(vec.begin(), vec.end(), 3);
	std::cout << *itr << std::endl;

	itr = std::find(vec.begin(), vec.end(), 10);
	if (itr == std::end(vec)) {
		std::cout << "Target is not exist" << std::endl;
	}

	auto itr1 = std::find_if(vec.begin(), vec.end(), [](const auto& v) {
		return (v % 2 == 0) ? true : false;
	});
	std::cout << *itr1 << std::endl;

	auto itr3 = std::find_end(vec.begin(), vec.end(), sub.begin(), sub.end());
	for (; itr3 != std::end(vec); itr3++) {
		std::cout << *itr3 << " ";
	}
	std::cout << std::endl;
	itr3 = std::find_end(vec.begin(), vec.end(), sub1.begin(), sub1.end());
	for (; itr3 != std::end(vec); itr3++) {
		std::cout << *itr3 << " ";
	}
	std::cout << std::endl;

	auto itr4 = std::find_if_not(vec.begin(), vec.end(), [](const auto& v) {
		return (v % 2 == 0) ? true : false;
	});
	std::cout << *itr4 << std::endl;
	
	auto itr5 = std::find_first_of(sub1.begin(), sub1.end(), sub.begin(), sub.end());
	for (; itr5 != std::end(sub1); itr5++) {
		std::cout << *itr5 << " ";
	}
	std::cout << std::endl;

	return 0;
}

출력

3
Target is not exist
2
3 4 5 6 7 8 9
1
3 3 4 53
Target is not exist
2
3 4 5 6 7 8 9

1
3 3 4 5

 

설명

1. std::find() 시 탐색 범위는 [first, last) 이다. 

 

2. std::find_if() 에서 탐색 조건은 () 연산자를 오버로딩하는 식 으로도 구현 할 수 있다.

조건을 만족하는 가장 첫번째 원소의 위치를 반환한다.

 

3. std::end() 는 컨테이너의 end()를 반환한다. std::end(vec) 나 vec.end() 나 같은 의미이다.

 

4. std::find_end() 는 첫번째 범위에서 두번째 범위의 나열이 가장 마지막으로 나타나는 위치를 반환한다.

그래서 sub1 의 나열이 vec에 없기 때문에 아무것도 출력되지 않는 것이다.

 

5. std::find_if_not() 은 조건을 만족하지 않는 가장 첫번째 원소의 위치를 반환한다.

 

6. std::find_first_of() 는 첫번째 범위에서 두번째 범위 내 어떠한 원소가 존재하는 위치를 반환한다.

{1, 2, 3, 3, 4, 5} 에서 {3, 4, 5} 중 3이 가장 먼저 발견되므로 

{1, 2, 3, 3, 4, 5} 에서 첫번째 3의 위치가 반환되어

3, 3, 4, 5 가 출력되는 것이다.



'C++' 카테고리의 다른 글

std::shared_ptr  (0) 2021.10.27
std::unique_ptr  (0) 2021.10.27
Lvalue & Rvalue  (0) 2021.10.21
형변환 연산자  (0) 2021.10.21
포인터  (0) 2021.10.21