泛型算法(二)之对序列的每个元素执行函数调用的算法

1、for_each(inIterBegin, inIterEnd, ufunc) :用函数对象ufunc调用序列中每一项元素

比如,输出序列的全部元素,可以这样写:

std::vector<int> c;
c.reserve(10);
//向c中添加元素
for (int i = 0; i < 10; i++)
{
    c.push_back(i);
}
//输出c中所有元素
std::for_each(c.begin(), c.end(), [](int element){
    std::cout<<element<<",";
});//打印结果:0,1,2,3,4,5,6,7,8,9

2、transform(InputIterator first1, InputIterator last1, OutputIterator result, UnaryOperation op) :对序列中每一个元素,执行一元操作op,结果写入另一序列中

比如,把c1中的元素全部乘以10后,放入c2中,可以这样写:

    std::vector<int> c1;
    std::vector<int> c2;
    c2.resize(10);        //!这个必须要有,具体参考《Effective STL》中的条款30:确保目标区间足够大
    //向c1中添加元素
    for (int i = 0; i < 10; i++)
    {
        c1.push_back(i);
    }
    //把c1中的每个元素乘以10后存入c2中
    std::transform(c1.begin(), c1.end(), c2.begin(), [](int element){
        return element * 10;
    });
    //输出c2中的元素
    for (auto var : c2)
    {
        std::cout << var << ",";
    }   //打印结果:0,10,20,30,40,50,60,70,80,90

3、transform (InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, OutputIterator result,BinaryOperation binary_op):对两个序列中对应的每一对元素,执行二元操作binary_op,结果写入另一序列中

比如,把上面的c1,c2中对应元素之和存入c3中,可以这样写:

std::vector<int> c1;
    std::vector<int> c2;
    std::vector<int> c3;
    c2.resize(10);        //!这个必须要有,具体参考《Effective STL》中的条款30:确保目标区间足够大
    c3.resize(10);
    //向c1中添加元素
    for (int i = 0; i < 10; i++)
    {
        c1.push_back(i);
    }
    //把c1中的每个元素乘以10后存入c2中
    std::transform(c1.begin(), c1.end(), c2.begin(), [](int element){
        return element * 10;
    });
    //把c1、c2中每个元素对应的和存入c3中
    std::transform(c1.begin(), c1.end(), c2.begin(), c3.begin(), [](int element1, int element2){
        return element1 + element2;
    });
    for (auto var : c3)
    {
        std::cout << var << ",";
    }
    //打印结果:0,11,22,33,44,55,66,77,88,99
时间: 2024-10-10 00:10:03

泛型算法(二)之对序列的每个元素执行函数调用的算法的相关文章

编程算法 - 两个升序列的相同元素 代码(C)

两个升序列的相同元素 代码(C) 本文地址: http://blog.csdn.net/caroline_wendy 两个升序列的相同元素, 需要使用两个指针, 依次遍历, 如果相等输出, 如果小于或大于, 则增加一个指针. 直到输出所有的值. 代码: /* * main.cpp * * Created on: 2014.9.19 * Author: spike */ #include <stdio.h> int Common(int data1[], int length1, int dat

【python cookbook】【数据结构与算法】16.筛选序列中的元素

问题:提取出序列中的值或者根据某些标准对序列做删减 解决方案:列表推导式.生成器表达式.使用内建的filter()函数 1.列表推导式方法:存在一个潜在的缺点,如果输入数据非常大可能会产生一个庞大的结果,考虑到该问题,建议选择生成器表达式 # Examples of different ways to filter data mylist = [1, 4, -5, 10, -7, 2, 3, -1] print('mylist=',mylist) # 使用列表推导式 pos = [n for n

【BZOJ-3809】Gty的二逼妹子序列 分块 + 莫队算法

3809: Gty的二逼妹子序列 Time Limit: 80 Sec  Memory Limit: 28 MBSubmit: 1072  Solved: 292[Submit][Status][Discuss] Description Autumn和Bakser又在研究Gty的妹子序列了!但他们遇到了一个难题. 对于一段妹子们,他们想让你帮忙求出这之内美丽度∈[a,b]的妹子的美丽度的种类数. 为了方便,我们规定妹子们的美丽度全都在[1,n]中. 给定一个长度为n(1<=n<=100000)

数据结构与算法二

1.课程安排表: 1. 线性表 2. 字符串 3. 栈和队列 4.树 5.查找 6.排序 7.暴力枚举法 8.广度优先搜索 9.深度优先搜索 10.分治 11.贪心 12.动态规划 13.图 14.数学方法与常见模型 15.大整数运算 16. 基础功能 2.   编程技巧: 1.把较大的数组放在main 函数(全局变量)外,作为全局变量,这样可以防止栈溢出,因为栈的大小是有限制的.GCC (C编译器) 段错误 2.如果能够预估栈,队列的上限,则不要用stack,queue,使用数组来模拟,这样速

算法笔记1-最大子序列和问题的求解

问题-- 给定N个整数(有可能是负数)A1,A2,A3,A4...An,求最大子序列和. (子序列必须是连续的):比如,对于输入,-2,11,-4,13,-5,-2:这个序列, 答案是20,即从A2到A4. 对于这个问题,你怎么想的呢?下面有四种解法,看看你的解法是不是其中之一. 解法一.穷举 解题思路-- 既然是求某一个连续的子序列的最大和,那么我们把所有的子序列的和都加一遍,然后用一个变量来存储最大的和值,当遍历一遍所有子序列,即可得到最大的和.由于这个子序列长度可以是1,也可以是N,因此需

Java 容器 & 泛型:二、ArrayList 、LinkedList和Vector比较

Writer:BYSocket(泥沙砖瓦浆木匠) 微博:BYSocket 豆瓣:BYSocket 继续上一篇的容器文章认识容器,泥瓦匠慢慢带你们走进List的容器解说.今天泥瓦匠想说说 ArrayList .LinkedList和Vector比较. 一.List回顾 序列(List),有序的Collection,正如它的名字一样,是一个有序的元素列表.确切的讲,列表通常允许满足 e1.equals(e2) 的元素对 e1 和 e2,并且如果列表本身允许 null 元素的话,通常它们允许多个 nu

【转载】Java泛型(二)

转自:http://www.cnblogs.com/lwbqqyumidi/p/3837629.html 一. 泛型概念的提出(为什么需要泛型)? 首先,我们看下下面这段简短的代码: 1 public class GenericTest { 2 3 public static void main(String[] args) { 4 List list = new ArrayList(); 5 list.add("qqyumidi"); 6 list.add("corn&qu

排序算法二:归并排序(Merge sort)

归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是o(nlgn). (一)算法实现 1 private void merge_sort(int[] array, int first, int last) { 2 if (first + 1 < last) { 3 int mid = (first + last) / 2; 4 merge_sort(array, first, mid); 5 merge_sort(array, mid, last); 6 7 /

基本排序算法&lt;二&gt;

希尔排序 原理:希尔排序也称之为递减增量排序,它是对插入排序的改进.在插入排序中,我们知道,插入排序对于近似已排好序的序列来说,效率很高,可以达到线性排序的效率.但是插入排序效率也是比较低的,他一次只能将数据向前移一位.比如如果一个长度为N的序列,最小的元素如果恰巧在末尾,那么使用插入排序仍需一步一步的向前移动和比较,要N-1次比较和交换.希尔排序通过将待比较的元素划分为几个区域来提升插入排序的效率.这样可以让元素可以一次性的朝最终位置迈进一大步,然后算法再取越来越小的步长进行排序,最后一步就是