c++11 algorithm 常用的容器算法
c++的vector、list、set、map及其成员函数已经足够我们大多数应用了,但是,c++11增加的algorithm配合container可谓所向披靡。vector vec = { 1, 2, 3, 4, 5, 6 }, out;std::copy_if:将容器中符合要求的元素复制到另一个容器std::copy_if(vec.begin(),
·
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)