STL原始碼剖析之數值演算法

2021-07-28 02:23:35 字數 3271 閱讀 6457

一、accumulate

作用:初始化init,對區間[first,last)的迭代器i執行init += *i或init = binaryop(init,*i)。 

template //版本1,用來計算init和[first,last)區間元素的總和

_tp accumulate(_inputiterator __first, _inputiterator __last, _tp __init)

template //版本2,對迭代器中每乙個元素時執行二元操作

_tp accumulate(_inputiterator __first, _inputiterator __last, _tp __init,

_binaryoperation __binary_op)

二、inner_product

作用:初始化init,對區間[first1,last1)和[first2,first2+(last1-first1))的兩個迭代器i和j執行init += *i**j或init = binaryop1(init,binaryop1(*i,*j))。 

template //版本1,兩個迭代器元素的內積

_tp inner_product(_inputiterator1 __first1, _inputiterator1 __last1,

_inputiterator2 __first2, _tp __init)

template //版本2,兩個迭代器的二元操作,提供operator+和operator*

_tp inner_product(_inputiterator1 __first1, _inputiterator1 __last1,

_inputiterator2 __first2, _tp __init,

_binaryoperation1 __binary_op1,

_binaryoperation2 __binary_op2)

三、partial_num

作用:區域性計算總和,*first賦值給*result,*first+*(first+1)賦值給*(result+1),依次類推,直至first==last。原始序列為[1,2,3,4,5],執行後得到[1,3,6,10,15]。

template _outputiterator 

__partial_sum(_inputiterator __first, _inputiterator __last,

_outputiterator __result, _tp*)

return ++__result;

}template //版本1

_outputiterator

partial_sum(_inputiterator __first, _inputiterator __last,

_outputiterator __result)

template _outputiterator

__partial_sum(_inputiterator __first, _inputiterator __last,

_outputiterator __result, _tp*, _binaryoperation __binary_op)

return ++__result;

}template //版本2

_outputiterator

partial_sum(_inputiterator __first, _inputiterator __last,

_outputiterator __result, _binaryoperation __binary_op)

四、adjacent_difference

作用:計算相鄰元素的差。原始序列為[1,2,3,4,5],執行partial_num後得到[1,3,6,10,15],再執行adjacent_difference後得到[1,2,3,4,5]。

template _outputiterator 

__adjacent_difference(_inputiterator __first, _inputiterator __last,

_outputiterator __result, _tp*)

return ++__result;

}template //版本1

_outputiterator

adjacent_difference(_inputiterator __first,

_inputiterator __last, _outputiterator __result)

template _outputiterator

__adjacent_difference(_inputiterator __first, _inputiterator __last,

_outputiterator __result, _tp*,

_binaryoperation __binary_op)

return ++__result;

}template _outputiterator

adjacent_difference(_inputiterator __first, _inputiterator __last,

_outputiterator __result, _binaryoperation __binary_op)

五、power(sgi專屬,不在stl之列)

作用:指定元素的n次方

template inline _tp __power(_tp __x, _integer __n)

template //冪次方

inline _tp power(_tp __x, _integer __n, _monoidoperation __opr)

template inline _tp power(_tp __x, _integer __n)

六、itoa(sgi專屬,不在stl之列)

作用:設定某個區間內容

template void 

iota(_forwarditer __first, _forwarditer __last, _tp __value)

STL原始碼剖析學習十二 演算法之數值演算法

相關函式都包含在中 先列個例項 include include include include include include using namespace std void main vector iv ia,ia 5 cout 0 0,minus 10 10,minus plus ostrea...

STL之deque原始碼剖析

deque是一種那個雙向開口的連續線性空間,其頭尾端做元素的插入和刪除效率比vector效率高很多。deque和vector的最大差異,一在於deque允許常數時間內對頭尾端進行元素插入或移除操作,二在於deque沒有所謂容量概念,因為它是動態地分段連續空間組合而成,隨時可以增加一段新的空間並鏈結起...

STL原始碼剖析之vector

向量vector 1.vector概述 vector的資料安排以及操作方式,與array非常相似。兩者的唯一差別在於空間的運用的靈活性。array是靜態空間,一旦配置了就不能改變 vector是動態空間,隨著元素的加入,它的內部機制會自行擴充空間以容納新元素。vector的實現技術,關鍵在於其對大小...