/*accumulate(): * 函数原型:template <class InputIterator,class Type> * Type accumulate(InputIterator first,InputIterator last,Type init); * template <class InputIterator,class Type,class BinaryOperation> * Type accumulate(InputIterator first,InputIterator last,Type init,BinaryOperation op) * * 功能:函数的第一个版本将Iterator[fisrt,last)范围内对象和init累加起来,函数返回计算 的 * 结果值。例如,序列(1,5,6,9,8,5,3),init为2,应用该函数后结果是39。第二个版本, * 用对象的操作 不再是加法了,具体操作由用户指定。由于这个函数是算术操作, 因此我们在使用它的时 候,必须包含头文件<numeric> 。 * * * 例: */ /*adjacent_difference(): * 函数原型:template <class InputIterator,class OutputIterator> * OutputIterator adjacent_difference(InputIterator first,InputIterator last, * OutputIterator result); * template <class InputIterator,class OutputIterator,class BinaryOperation> * OutputIterator adjacent_difference(InputIterator first,InputIterator last, * OutputIterator result,BinaryOperation op); * * 功能:函数的第一个版本将序列[first,last)中的每一对相邻元素相减后结果存放在新序列result * 中。其中新序列的第一个元素与原序列相同。例如,序列(1,5,6,9,8,5,3),产生的新的序列为 * (1,4,1,3,-1,-3,-2);与第一个版本不同的是,第二个版本的操作要求不再是减法,可以由用户 * 指定的二元操作。由于这个函数是算术运算,因此在使用时必须包含头文件<numeric>。 * * 例: */#include <iostream>#include <numeric>#include <vector>#include <functional> using namespace std; int main(){ int array[] = {1,5,6,9,8,5,3}; vector<int> v(array,array+7); //用数组初始化向量 vector<int> newV(v.size()); //新序列 int result = 2; //accumulate cout << accumulate(v.begin(),v.end(),result) << endl; //连续乘,结果应用64800 cout << accumulate(v.begin(),v.end(),result,multiplies<int>()) << endl; //adjacent_difference adjacent_difference(v.begin(),v.end(),newV.begin()); copy(newV.begin(),newV.end(),ostream_iterator<int>(cout," ")); cout << endl; //相邻元素相乘,产生的新序列为(1 5 30 54 72 40 15) adjacent_difference(v.begin(),v.end(),newV.begin(),multiplies<int>()); copy(newV.begin(),newV.end(),ostream_iterator<int>(cout," ")); cout << endl; system("pause"); return 0; }

评论