zoukankan      html  css  js  c++  java
  • c++学习笔记(七)- lambda表达式 迭代器 算法

    关于lambda表达式:

    刷题的时候遇到一句代码不懂:

    char ch = *it;
    auto it2 = find_if(it, b.end(), [ch](char x){ return x != ch; });

    find_if :当pred为真时,返回迭代器的值;若所有元素都不满足,返回最后一个元素位置。

    这里的[ch](char x){ return x != ch; }是套用lambda表达式。

    lambda表达式  c++中的lambda表达式详解

    这里用的是第三种,捕获ch,参数是x,若x!=ch返回1,find_if的pred为真,停止迭代,返回此时的it。

    Lambda就是一个匿名函数,适用于要实现某个很简单函数,而且我们只会需要调用它一次的情况”----知乎,路人甲。

    此外pred还可以用仿函数实现,参考这里以及lambda和仿函数,不知不觉又铺开好大一片,先保存,以后用到的时候再研究了。

    关于迭代器:

    比如for循环的终止条件,要用it!=xx.end(),it<=xx.end()是不行的。

    上述find_if当然还是可以自己for循环查找一个,但没有find_if用起来方便,自己写for需要判断好边界条件,find_if是如果不满足pred直接返回最后一个元素索引。

    -----2018.01.05-----

    今天写了一段程序,用迭代器插入vector:

        vector<int>::iterator it = myVec1.begin();
        cout << *it << endl;
        myVec1.insert(it, 1, 99);
        cout << *it << endl;

    程序刚运行就崩溃了(看和做的区别,道理你都懂,一用就完蛋),仔细看C++ reference关于insert的部分:

    正确的写法应该是:

        vector<int>::iterator it = myVec1.begin();
        cout << *it << endl;
        myVec1.insert(it, 1, 99);
        it = myVec1.begin();
        cout << *it << endl;
  • 相关阅读:
    包含min函数的栈
    量化交易系统的四个组成部分
    顺时针打印矩阵
    python正则表达式中re.M,re.S,re.I的作用
    二叉树的镜像
    树的子结构
    合并两个排序的链表
    反转链表
    命名元祖
    二叉树(二叉搜索树-AVL树-B树)
  • 原文地址:https://www.cnblogs.com/zhengmeisong/p/8093217.html
Copyright © 2011-2022 走看看