STL常用函数

以下是我在工作中用到的stl函数,如果用对了函数,可以事半功倍,也可以让自己的代码更加优雅。持续更新<2022-08-30>
完整函数库在这里,有需要可自行查阅:
https://en.cppreference.com/w/cpp/algorithm

删除vector中所有符合条件的元素

这个场景还是很常见的,面试也很常见,有人说用倒叙删除。stl中也有更优雅的方法,erase() + remove_if,简单格式如下:

std::vector<int> vec;
int conditionValue = 10;
vec.erase(std::remove_if(vec.begin(), vec.end(), [conditionValue](int value) { return value == conditionValue;}), vec.end());

std::remove_if会把vector中所有符合条件的元素都放到vector末尾,并不会删除掉这些元素,需要配合erase()才能完全清理

清理vector末尾的若干元素

如果需要清理vector末尾的一个元素,则使用pop_back()即可。那如果是删除末尾的2个以上元素呢?有人可能想到写个循环,多pop_back()几次。其实可以用resize()即可

获取vector中最大元素和最小元素

std::max_element(iter.begin(), iter.end()); // 获取最大元素
std::min_element(iter.begin(), iter.end()); // 获取最小元素
std::minmax_element(iter.begin(), iter.end()); // 同时返回 min max 的位置

删除map中所有符合条件的元素

废话不多说,直接贴官方示例:

#include <map>
#include <iostream>
 
int main()
{
    std::map<int, std::string> c =
    {
        {1, "one" }, {2, "two" }, {3, "three"},
        {4, "four"}, {5, "five"}, {6, "six"  }
    };
 
    // erase all odd numbers from c
    for (auto it = c.begin(); it != c.end();)
    {
        if (it->first % 2 != 0)
            it = c.erase(it);
        else
            ++it;
    }
 
    for (auto& p : c)
        std::cout << p.second << ' ';
}

里面主要知识点是:map.erase(it)返回的是,被移除元素的迭代器的下一个迭代器!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容