C++ 표준 라이브러리인 algorithm 라이브러리는 원소들에 대해 작업할 수 있는 여러 가지 함수들을 정의하고 있다.
사용하려면 <algorithm> 헤더를 추가해야 한다.
std:: 을 생략하려면 using namespace std; 추가
find()
범위 안에 원소들 중 값이 일치하는 원소를 찾는다.
// find(first, last, value)
vector<int>::iterator itFind = find(v.begin(), v.end(), number);
find_if()
범위 안에 원소들 중 조건과 일치하는 원소를 찾는다.
// find(first, last, pred)
class CanDivideBy11
{
public:
bool operator()(int n)
{
return (n % 11) == 0;
}
};
vector<int>::iterator itFind = find_if(v.begin(), v.end(), CanDivideBy11());
count()
범위 안에 특정 값과 일치하는 원소의 개수를 반환한다.
// count(first, last, value)
int a = count(v.begin(), v.end(), 11);
count_if()
범위 안에 특정 조건을 만족하는 원소의 개수를 반환한다.
// count_if(first, last, pred)
struct IsOdd
{
bool operator()(int n)
{
return (n % 2) != 0;
}
};
int a = count_if(v.begin(), v.end(), IsOdd());
all_of()
범위 안에 모든 원소들이 조건을 만족하는지 확인한다.
// all_of(first, last, pred)
struct IsOdd
{
bool operator()(int n)
{
return (n % 2) != 0;
}
};
bool a = all_of(v.begin(), v.end(), IsOdd());
any_of()
범위 안에 원소들 중 조건을 만족하는 원소가 있는지 확인한다.
// any_of(first, last, pred)
struct IsOdd
{
bool operator()(int n)
{
return (n % 2) != 0;
}
};
bool a = any_of(v.begin(), v.end(), IsOdd());
none_of()
범위 안에 모든 원소들이 조건을 만족하지 않는지 확인한다.
// none_of(first, last, pred)
struct IsOdd
{
bool operator()(int n)
{
return (n % 2) != 0;
}
};
bool a = none_of(v.begin(), v.end(), IsOdd());
for_each()
범위 안에 원소들 각각에 대해 전달된 함수를 호출한다.
// for_each(first, last, func)
struct MultiflyBy3
{
void operator()(int& n)
{
n = n * 3;
}
};
for_each(v.begin(), v.end(), MultiflyBy3());
remove()
범위 안에 특정 값들을 모두 삭제한다.
// remove(first, last, value)
remove(v.begin(), v.end(), 2);
remove_if()
범위 안에 특정 조건을 만족하는 원소들을 시작 범위부터 차례대로 변환한다.
// remove_if(first, last, pred)
struct IsOdd
{
bool operator()(int n)
{
return (n % 2) != 0;
}
};
// vector v의 원소
// [1] [4] [3] [5] [8] [2]
vector<int>::iterator it = remove_if(v.begin(), v.end(), IsOdd());
// remove_if 후 v의 원소
// [4] [8] [2] [5] [8] [2]
v.erase(it, v.end());
// 한 번에 해줄 수도 있다.
v.erase(remove_if(v.begin(), v.end(), IsOdd()), v.end());
1 4 3 5 8 2 (v의 원소) 에서 조건에 맞는 숫자인 1 3 5는 건너뛰고, 4 8 2 순서로 원소를 재배치한다.
재배치한 후 4 8 2 5 8 2 에서는 4 8 2만 유효하고, 뒤의 원소들은 제거 원소로 생각하면 된다.
remove_if() 후 반환값은 4 8 2 5 8 2에서 제거 원소의 시작인 5에 위치해 있다.
제거 원소시작 위치인 it부터 v.end()까지 삭제해 주면 끝난다. (remove_if()랑 erase()는 세트로 보면 좋다.)
sort()
범위 안에 원소들을 오름차순으로 정렬한다.
// sort(first, last)
vector<int> arr {0, 1, 2, 4, 3};
sort(arr.begin(), arr.end());
내림차순
vector<int> arr {0, 1, 2, 4, 3};
sort(arr.begin(), arr.end(), greater<int>());
max_element()
범위 안에 원소들의 최댓값을 반환한다.
// return value = max_element(first, last)
vector<int> arr {0, 1, 2, 4, 3};
int n = *max_element(arr.begin(), arr.end());
min_element()
범위 안에 원소들의 최솟값을 반환한다.
// return value = min_element(first, last)
vector<int> arr {0, 1, 2, 4, 3};
int n = *min_element(arr.begin(), arr.end());
'📕Programming > 📝C/C++' 카테고리의 다른 글
[C / C++] 난수 생성 (0) | 2024.02.01 |
---|---|
[C / C++] 인라인 함수 (inline function) (0) | 2023.12.28 |
[C / C++] 객체 지향 - 상속성, 은닉성, 다형성 (0) | 2023.09.27 |
[C / C++] 문자열 (0) | 2023.09.14 |
[C / C++] 포인터 (pointer) (0) | 2023.09.12 |