---C++ 역량 강화---/STL 공부

accumulate와 reduce의 차이

코리아탑클 2024. 5. 31. 00:35

[[[accumulate 설명]]] 

시작 반복자, 끝 반복자, 초기 값

first ~ last까지 값을 "누적"한 후 "값을 return"한다.

예를들어 어떤 컨테이너 v에 int값이 1,2,3,4,5들어가 있다.

first = v.begin(), last = v.end(), initval = 0 이라고 한다면

0부터 시작해서 0 -> 1 -> 3 -> 6 -> 10 ->15 이렇게 값을 누적한 후 15를 리턴한다.

initval = 1이라면 1 -> 2 -> 4 -> 7 -> 11 -> 16 이렇게 값을 누적한다.

정리: 1. 값을 누적 2. 값을 return

간단한 원리니까 함수를 구현해보자.

 

원본 사용

==헤더==

#include <iostream>
#include <vector>
#include <numeric>

 

==소스 코드==

1부터 시작해서 값을 누적하여 더하는 프로그램이다.

 

평균을 구하는 프로그램이다.

이런식으로 마지막 인자에 LL 접미사를 붙이면 long long 출력값이 나온다.

자릿수가 높은 값들의 누적 합을 출력하기 위해서 long long으로 출력한 것이다.

 

의사 코드

==소스 코드==

보다시피 단순히 값을 누적하는 코드를 구현하였다.

 

[[[reduce 설명]]] 

reduce : 누산

 

reduce랑 accumulate는 동작이 같다. reduce도 값을 누적시켜서 반환하나보다.

 

[[[문제]]]

v에 저장된 단어의 평균 길이를 소수점 둘째자리까지 출력하라

reduce 함수도 accumulate와 동일하게 사용 가능한 것을 확인 가능하다.

transform_reduce

1. plus: "누산값 val"과 "문자열 str의 길이"를 더하는 "함수 객체"

plus라는 class가 있고 plus{} 혹은 plus<>()해서 함수 객체를 생성

 

2. sumLength: 문자열의 길이를 계산하는 함수

누산시키는 함수 객체와 더할 값을 얻어내는 함수 두 개가 필요하다.

 

==문제==

std::plus tempate class의 함수 객체를 만들어서 operator 연산자를 호출해보자(함수 객체 연습)

함수 호출 연산자를 포함하고 있는 객체를 함수 객체라고 한다.

plus<int>()는 임시 객체를 만드는데, 함수 호출 연산자를 포함하니 임시 함수 객체다.

임시 객체도 객체의 기능을 충분히 이용할 수 있다.

 

학습 장소: 한국공학대학교 게임공학과 수업

참고: https://en.cppreference.com/w/

'---C++ 역량 강화--- > STL 공부' 카테고리의 다른 글

iota  (0) 2024.05.31
sample  (0) 2024.05.31
all_of, any_of, none_of  (0) 2024.05.30
알고리즘의 분류  (0) 2024.05.30
rotate 함수를 이용한 전광판 만들기  (0) 2024.05.29