STL 함수들은 워낙 정보가 많아 이 블로그에 굳이 정리를 해야할까 생각을 했지만
이 블로그의 시작은 내가 알게된 것들을 다시 정리하기 위함이 목적이었기 때문에
STL에 대한 내용도 계속해서 추가할 예정이다.
1. generate
algorithm 헤더에 정의되어 있다.
STL 관련해서 아주 정리가 잘 되어 있어 자주 애용하는 곳이다.
오늘 정리할 함수에 대해서도 참고를 했다.
generate 함수는 인자로 입력된 범위에 인자로 입력된 함수의 리턴 값으로 복사한다.
for_each도 마찬가지로 범위를 전달받고 각 원소에 대해 실행할 함수도 전달 받는다.(함수의 리턴 값은 무시된다.)
for문으로도 동일하게 구현할 수 있을 것 같지만 람다 함수까지 사용하여 구현한다면 코드가 매우 간단해진다.
예제
#include <algorithm>
int randF()
{
return rand() % 2;
}
void printF(int n)
{
cout << n << " ";
}
int main()
{
vector<int> r(20);
cout << "Implementation using for loop" << endl;
for(int i=0; i<20; i++) {
r[i] = randF();
}
for(int i=0; i<20; i++) {
cout << r[i] << " ";
}
cout << endl;
cout << "Implementation using STL and lambda function" << endl;
generate(r.begin(), r.end(), []()->int {return rand() % 2;});
for_each(r.begin(), r.end(), [](int n)->void {cout << n << " ";});
return 0;
}
출력
Implementation using for loop
1 1 0 0 1 0 0 0 0 0 1 1 1 1 1 1 1 0 1 0
Implementation using STL and lambda function
1 0 0 1 0 0 1 0 0 1 1 0 1 0 1 0 1 1 1 0
*for_each 글의 댓글에서 for_each 함수의 장점이 단순히 코드의 간결화뿐이라고 하는데...
만약 그렇다면 generate도 for문과 성능 차이가 전혀 없을 수도 있겠다.
이 부분은 정확히 잘 모르겠다...
*람다 함수는 업무에서도 사용해본 적이 별로 없어 추가로 포스팅할 예정이다.
'Language' 카테고리의 다른 글
| [C++] Smart pointer (0) | 2022.06.20 |
|---|---|
| [C++] stringstream - 문자열 처리 (0) | 2022.04.04 |