C++中泛型算法详解3:使用谓词的算法

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; });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值