以下是我在工作中用到的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)返回的是,被移除元素的迭代器的下一个迭代器!
网友评论