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

来源:互联网 发布:狸窝转换器for mac 编辑:程序博客网 时间:2024/05/21 10:35

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/

1 0