关于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表达式。
这里用的是第三种,捕获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;