STL 함수들은 워낙 정보가 많아 이 블로그에 굳이 정리를 해야할까 생각을 했지만

이 블로그의 시작은 내가 알게된 것들을 다시 정리하기 위함이 목적이었기 때문에

STL에 대한 내용도 계속해서 추가할 예정이다.

 

1. generate

algorithm 헤더에 정의되어 있다.

https://modoocode.com/318

https://modoocode.com/260

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

+ Recent posts