It won't hurt to try
[C++/윈도우프로그래밍응용]26. STL 알고리즘과 람다식 본문
STL 알고리즘과 람다식
STL 알고리즘
STL 알고리즘
템플릿 기반의 일반적인 알고리즘 모음
- 탐색(searching), 정렬(sorting), 개수세기(counting)등의 일반적인 알고리즘을 모아둔 것
- 모든 컨테이너에 대하여 같은 방식으로 동작
→ 템플릿을 사용한 일반화 프로그래밍 - 반복자를 사용하여 컨테이너에 접근
→ 반복자는 알고리즘과 컨테이너를 연결하는 역할 - <algorithm> 헤터 파일을 포함
STL 알고리즘의 종류
불변경 알고리즘
- 컨테이너가 변경되지 않는 알고리즘
- 개수 알고리즘, 탐색 알고리즘, 비교 알고리즘
알고리즘 분류 | 알고리즘 | 설명 |
개수 | count() | 값과 일치하는 요소의 개수를 셈 |
count_if() | 조건에 맞는 요소 개수를 셈 | |
탐색 | search() | 값과 일치하는 첫 번째 요소 반환 |
find() | 값과 일치하는 첫번째 요소 반환 | |
binary_search() | 정렬된 컨테이너에 대한 이진 탐색 수행 | |
비교 | equal() | 두 요소가 같은지 비교 |
mismatch() | 컨테이너 비교 후 불일치 첫번째 요소 반환 | |
lexicographical_compare() | 두 순차 컨테이너 비교 후 사전적으로 작은 컨테이너를 반환 |
변경 알고리즘
- 컨테이너가 변경되는 알고리즘
- 초기화 알고리즘, 변경 알고리즘, 복사 알고리즘, 삭제 알고리즘, 대치 알고리즘, 정렬 알고리즘, 분할 알고리즘 등
알고리즘 분류 | 알고리즘 | 설명 |
초기화 | fill() | 지정 범위 모든 요소를 지정 값으로 채움 |
generate() | 지정 함수의 반환값을 할당 | |
변경 | for_each() | 지정 범위 모든 요소에 대하여 연산 수행 |
transform() | 지정 범위 모든 요소에 대하여 함수 적용 | |
복사 | copy() | 하나의 구간을 다른 구간으로 복사 |
삭제 | remove() | 지정 구간에서 지정 값을 가진 요소 삭제 |
unique() | 구간에서 중복 요소를 삭제 | |
대치 | replace() | 지정 구간에서 요소가 지정 값과 일치하면 대치값으로 변경 |
정렬 | sort() | 지정된 정렬 기준에 따라 구간 요소 정렬 |
분할 | partition() | 지정 구간 요소를 조건에 따라 두 개의 집합으로 나눔 |
많이 사용되는 알고리즘
binary_search() 함수
이진 탐색을 수행하는 알고리즘
// 비교 함수 정의
bool comp(int n1, int n2) {return n1==n2;}
// main 함수의 내부
vector<int> v = {2,3,5,8,13,19,21};
bool isFound = false;
isFound = binary_search(v.begin(), v.end(), 19, comp);
if(isFound){
cout << 19 << "발견" << endl;
}
sort() 함수
이진 탐색을 수행하는 알고리즘
// 비교 함수 정의
bool comp(int n1, int n2) {return n1>n2;}
// main 함수의 내부
vector<int> v = {11,15,9,2,8,5,27};
sort(v.begin(), v.end(), comp);
for(auto & n : v)
cout << n endl;
람다식
람다식(Lambda Expression)
나중에 실행될 목적으로 다른 곳에 전달될 수 있는 함수 객체
- "이름이 없는 함수"
- 함수가 필요한 곳에 간단하게 함수를 보낼 수 있음
→ 사용이 간결함 - 함수가 1회성으로 사용되며, 함수 길이가 짧을 때 유용
- 함수형 프로그래밍 언어의 패러다임을 위한 개념
람다식의 정의
람다식의 정의 형식
[] (매개변수1, 배개변수2, ...) 반환형 {함수의 내용;}
예) 매개변수x,y를 전달받아 x+y 계산 후 반환하는 함수
[] (int x, int y) {return x+y;}
#include <iostream>
using namespace std;
int main(){
auto sum = [](int x, int y) {return x+y;}
cout << sum(11,47) << endl;
cout << sum(11,78) << endl;
return 0;
}
sort함수에서 사용되는 비교함수를 람다식으로 구성할 수 있다.
// main 함수의 내부
vector<int> v = {11,15,9,2,8,5,27};
sort(v.begin(), v.end(), [](int n1, int n2) {return n1>n2;});
for(auto & n : v)
cout << n endl;
300x250
300x250
'C++ > 윈도우프로그래밍응용' 카테고리의 다른 글
[C++/윈도우프로그래밍응용]28. Qt의 기본 프로그래밍 (0) | 2021.11.13 |
---|---|
[C++/윈도우프로그래밍응용]27. Qt의 개요 (0) | 2021.11.09 |
[C++/윈도우프로그래밍응용]24. 표준 템플릿 라이브러리(STL) (0) | 2021.11.02 |
[C++/윈도우프로그래밍응용]23. 템플릿 (0) | 2021.10.30 |
[C++/윈도우프로그래밍응용]22. 예외 처리 (0) | 2021.10.30 |
Comments