2016-06-24 24 views
5

Beim Lesen über std::inclusive_scan scheint es keine Beispiele zu geben.
Es scheint mir sehr ähnlich wie std::partial_sum.Was ist der Unterschied zwischen std :: partial_sum und std :: inclusive_scan?

partial_sum:

template< class InputIt, class OutputIt > 
OutputIt partial_sum(InputIt first, 
         InputIt last, OutputIt d_first); 

inclusive_scan:

template< class InputIt, class OutputIt > 
OutputIt inclusive_scan(InputIt first, 
         InputIt last, OutputIt d_first); 

Kann jemand auf ihre Unterschiede näher erläutern? Wann würde ich eins über das andere wählen?

Antwort

10

Dokumentation von std::inclusive_scan Staaten:

Mit anderen Worten können die Summenoperationen in beliebiger Reihenfolge durchgeführt werden. Das Verhalten ist nicht deterministisch, wenn binary_op nicht assoziativ ist.

Dokumentation der std::partial_sum Staaten ohne Vorbehalt, dass:

*(d_first+k) = *first + *(first+1) + ... + *(first+k); 

Somit ist std::inclusive_scan entspricht std::partial_sum nur, wenn binary_op assoziativ ist, dh wenn (aopb)opc = aop(bopc).

Bei nicht assoziativem binary_op wird std::partial_sum ein deterministisches Ergebnis liefern, während Sie nicht wissen, was Sie von std::inclusive_scan erwarten können.

Verwandte Themen