반응형

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

+ Recent posts