cpp numeric
#include <numeric>
+accumulate ; 범위의 값들을 축적( 디폴트는 합)한다. 현재 계산된 값(처음은 초기값)에 요소의 값을 연산하는 것을 모든 요소에 대하여 순차적으로 수행.
; 현재결과 operation(+,..) 각각의 요소 => 하나의 값 출력
T accumulate(first, last, T init (,binary_op) ) ; // init=초기값. binary_op=요소별 축적 작업
ex) 초기값 100에 {10,20,30}을 모두 더함.
int numbers[]={10,20,30} ;
std::accumulate( numbers, numbers+3, 100) ; // = 160
std::accumulate( numbers, numbers+3, 100, std::minus<int>() ) ;
// 100-10-20-30 = 40
std::accumulate( numbers, numbers+3, 100, myfunc) ;
int myfunc(intx, int y) { return x+ 2*y ; }
// 100+10*2+20*2+30*2 = 220
std::accumulate( numbers, numbers+3, 100, myobj) ;
struct myclass {
int operator() (int x, int y) { return x+ 3*y ; }
} myobj ;
// 100+3*10+3*20+3*30 = 280
+ adjacent_difference ; 옆에 있는 요소와의 차이. 차이를 구하는 함수 별도 설정가능
; 앞의 요소 operation 각각의 요소 => 요소 개수 크기의 리스트.
adjacent_difference ( first, last, result (,binary_op) ) ; 범위, 저장, ( diff로 쓸 함수 )
ex) // val = 1,2,3,5,9,11,12
int result[7] ;
std::adjacent_difference( val, val+7, result) ;
// result => (시작값)1, 1 1 2 4 2 1 // 자신의 값 - 앞의 값.
std::adjacent_difference( val, val+7, result, std::multiplies<int>() ) ;
// result => (시작값)1 2 6 15 45 99 132 // 앞의 값과 자신의 값을 곱함.
+ inner_product ; 두 벡터의 내적을 구함.
두 벡터의 요소들간에 곱한 것들을 더함.
T inner_product(first1, last1, fist2, T init) ; // init;초기값
뒤에 추가 파라미터로 binary_op1, binary_op2 가 올 수 있음.
// 연산은 binary_op1 ( init, binary_op2 (*first1, *first2) ) 이렇게 반복됨.
// 디폴트는 op2= multiply, op1 = plus
ex)
s1 = 10,20,30
s2 = 1,2,3
std::inner_product(s1, s1+3, s2, 1000) ; // 내적을 구함 => 140, 초기값을 합침 = 1140
// 1140
+partial_sum ; 부분 합. 합말고 곱이나 다른 함수 사용 가능.
단계별로 accumulate한 것을 list 로 만든다.
ex)
// val = 1,2,3,4,5
std::partial_sum(val, val+5, result) ;
//result= 1 3 6 10 15
std::partial_sum(val, val+5, result, std::multiplies<int>() ) ; // 작업함수 변경
// result= 1 2 6 24 120
+iota ; c++11 스펠링주의. itoa가 아님.
연속적인 값들을 범위를 할당.
즉, 지정된 범위에 1,2,3,4... 이렇게 증가되는 값을 할당.
int numbers[10] ;
std::iota(numbers, numbers+10, 100) ;
// numbers => 100 101 102 103 ... 109 ; 100부터 1씩 증가된 값을 할당한다.
'Develop > C&CPP' 카테고리의 다른 글
algorithm 2 copy,swap,transform,replace,fill,generate,remove,unique,.. (0) | 2018.06.04 |
---|---|
algorithm 1. test, find, count, search, foreach (0) | 2018.06.01 |
string function (0) | 2018.05.31 |
string (0) | 2018.05.30 |
map (0) | 2018.05.29 |