stable_sort
稳定排序,最小程度打乱之前的排序顺序
stable_sort(words,begin(), words.end(),
[](const string &a, const string &b){return a.size() < b.size();});
partition
接受一个谓词,对容器内容划分,谓词true的值排在容器的前半部分,谓词为false的排在后半部分。
算法返回迭代器,只想最后一个使得谓词为true的元素之后的位置。
与sort相同,stl库也有stable_partition版本
举例
输出vs中所有>=5的字符串
auto loc = partition(vs.begin(), vs.end(), [](const string& s){return s.size() >= 5;});
find_if
find算法的升级版本,可以根据第三个一元谓词参数,返回第一个使得谓词返回非0值的元素。如果不存在这样的元素,就返回尾迭代器。
举例
使用lambda中的捕获列表实现根据输入参数length返回对应的string。
auto find_first_large_string(vector<string> vs, int length){
auto wc = find_if(vs.begin(), vs.end(),
[length](const string &s){return s.size() >= length;});
return wc;
}
同样的,count也有对应的count_if
版本
for_each
使用for_each可以实现对迭代器期间的每个值执行谓词定义的操作
我们来讲所有长度大于等于length的元素打印出来
for_each(wc, vs.end(), [](const string &s){cout << s << " ";});
transform
使用transform算法和lambda将一个序列中的每个负数替换为其绝对值:
transform(vi.begin(), vi.end(), vi.begin(), [](int i){return i < 0? -i: i; });