正文

STL算法学习(一)2006-07-19 10:51:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/argol/16674.html

分享到:

/*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; }

阅读(4443) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册