이 코드는 C++의 <algorithm> 라이브러리를 활용하여 데이터 탐색, 조건 검색, 데이터 변환 및 삭제 등의 다양한 알고리즘을 실습하는 예제입니다.
find() - 특정 값을 벡터에서 찾기 find_if() - 조건을 만족하는 첫 번째 값 찾기 count_if() - 조건을 만족하는 개수 찾기 all_of() / any_of() / none_of() - 데이터 조건 확인 for_each() - 모든 요소에 대한 연산 수행 remove_if() - 조건을 만족하는 데이터 삭제 이러한 알고리즘을 사용하면 효율적인 데이터 처리 및 코드 가독성을 향상시킬 수 있습니다.
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
✅ 헤더 파일 설명
#include <iostream> → 콘솔 입출력 사용 #include <vector> → 동적 배열 STL 활용 #include <algorithm> → 알고리즘 라이브러리 사용 void PrintFunc(int n) {
cout << n << endl;
}
✅ 출력 함수 정의
for_each()에서 사용할 간단한 출력 함수 main 함수 시작int main()
{
// 자료구조 (데이터를 저장하는 구조)
// 알고리즘 (저장한 데이터를 어떻게 사용할 것인가?)
vector<int> v;
int number = 50;
for (int i = 0; i < 100; i++) {
v.push_back(i);
}
✅ 벡터 v를 0~99까지 초기화
vector<int> v; → 정수형 벡터 선언 v.push_back(i); → 0부터 99까지 값 추가 find() - 특정 값 찾기 // find
// (시작 주소, 끝 주소 + 1, 찾을 대상)
{
vector<int>::iterator itFind = find(v.begin(), v.end(), number);
if (itFind == v.end()) cout << "못 찾음" << endl;
else cout << "찾음" << endl;
}
✅ 특정 값(50)이 벡터에 있는지 확인
find(v.begin(), v.end(), number) → 50을 찾음 "찾음" 출력, 없으면 "못 찾음" 출력 find_if() - 조건을 만족하는 값 찾기 // find_if
// (시작 주소, 끝 주소 + 1, 조건식)
{
struct CanDivideBy11 {
bool operator()(int n) {
return n % 11 == 0;
}
};
vector<int>::iterator itFind = find_if(v.begin(), v.end(), CanDivideBy11());
if (itFind == v.end()) cout << "못 찾음" << endl;
else cout << "찾음" << endl;
}
✅ 11로 나누어 떨어지는 첫 번째 값 찾기
find_if()는 조건을 만족하는 첫 번째 값을 반환 CanDivideBy11을 활용하여 n % 11 == 0인 값 찾기 count_if() - 특정 조건을 만족하는 개수 찾기 // count_if
// (시작 주소, 끝 주소 + 1, 조건문)
{
struct IsOdd {
bool operator()(int n) {
return n % 2 != 0;
}
};
int count = count_if(v.begin(), v.end(), IsOdd());
cout << count << endl;
✅ 홀수 개수 찾기
count_if()를 사용하여 IsOdd() 조건을 만족하는 개수 계산 all_of(), any_of(), none_of() - 데이터 조건 확인 // all_of : 모든 데이터가 조건을 만족하는가?
// any_of : 조건을 만족하는 데이터가 하나라도 존재하는가?
// none_of : 조건을 만족하는 데이터가 하나도 없는가?
bool b1 = all_of(v.begin(), v.end(), IsOdd());
bool b2 = any_of(v.begin(), v.end(), IsOdd());
bool b3 = none_of(v.begin(), v.end(), IsOdd());
cout << "b1 : " << b1 << ", b2 : " << b2 << ", b3 : " << b3 << endl;
}
✅ 모든 요소가 특정 조건을 만족하는지 검사
all_of() → 모든 요소가 조건을 만족하면 true any_of() → 하나라도 조건 만족 시 true none_of() → 조건을 만족하는 요소가 없으면 true for_each() - 모든 요소에 연산 적용 // for_each
// 모든 데이터를 스캔할 때
// (시작 주소, 끝 주소 + 1, 조건문)
{
struct MultiplyBy3 {
void operator()(int& n) {
n *= 3;
cout << n << endl;
}
};
for_each(v.begin(), v.end(), MultiplyBy3());
}
✅ 벡터의 모든 요소를 3배 증가
for_each()를 활용하여 MultiplyBy3() 함수 실행 remove_if() - 특정 조건을 만족하는 데이터 삭제 // remove
// remove_if
{
v.clear();
v.push_back(1);
v.push_back(4);
v.push_back(3);
v.push_back(5);
v.push_back(8);
v.push_back(2);
struct IsOdd {
bool operator()(int n) {
return n % 2 != 0;
}
};
v.erase(remove_if(v.begin(), v.end(), IsOdd()), v.end());
}
✅ 벡터에서 홀수 삭제
remove_if()는 삭제할 값들을 벡터 뒤쪽으로 이동 erase()를 사용해 실제로 제거