#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 |