c++11 algorithm 常用的容器算法

c++的vector、list、set、map及其成员函数已经足够我们大多数应用了,

但是,

c++11增加的algorithm配合container可谓所向披靡。

vector<int> vec = { 1, 2, 3, 4, 5, 6 }, out;

std::copy_if:将容器中符合要求的元素复制到另一个容器

std::copy_if(vec.begin(), 
                 vec.end(), 
                 std::back_inserter(out), 
                 // 在out的结尾插入。如果是开头,使用std::front_inserter
                 [](int it)->bool { 
    return it % 2 == 1; 
});

std::remove_if:将待删除的元素全都移动到容器的尾部

auto iterator = 
    std::remove_if(vec.begin(), 
                         vec.end(), 
                         [](int it)->bool { 
    return it % 2 == 1; 
});

此时容器内容为2,4,6,1,3,5,iterator指向1

vec.erase(iterator, vec.end());  // 删除1,3,5

为什么std::remove_if没有删除元素而是仅将待删除元素移到容器尾部呢?

因为删除元素会导致容器发生变化,如vector会拷贝元素,这将大大影响效率。

std::reverse:将容器的元素逆转

std::sort:排序

auto compare = []()->bool {};

返回true,表示升序排列;返回false表示降序排列。

特别注意:比较函数必须确定,不能出现二义性(某些情况a大于b,另些情况a小于b)。

更多算法请参见:http://www.cplusplus.com/reference/algorithm/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值