touch fish 13
1. string sso
2. 手把手asan
3. template多参数怎么拿具体idx
4. 注入模版类名怎么写?
5. 高速缓存与一致性
6 简单看几个c++的STL用法
简单看几个c++里STL很有用的地方,然后需要注意的地方
6.1 批量删除
第一个脑回路想到的可能是正向遍历,然后删除。
这样的缺点是会造成后续元素的往前移动,导致时间复杂度为O(n^2)。
1
2
3
4
5
6
7
for (auto it = vec.begin(); it != vec.end();) {
if (condition) {
it = vec.erase(it);
} else {
++it;
}
}
当然,如果你倒序遍历,常数会小一些,但是时间复杂度还是O(n^2)。
标准库里提供了一种更好的办法,就是std::remove_if
。
1
2
auto cond = [&](const auto& x) { return SomeCondition(x, param); };
vec.erase(std::remove_if(vec.begin(), vec.end(), cond), vec.end());
这种情况下的算法复杂度是O(n)。
6.2 使用auto
for range loop,记得用auto,不然的话可能有额外的拷贝
1
2
3
4
5
6
7
8
9
map<string, int> word_count;
for (const auto& kv : word_count) {
// kv.first, kv.second
}
// C++17
for (const auto& [word, count] : word_count} {
}
如果一定要标注类型,记得const
1
2
for (const std::pair<const std::string, int>& kv : word_count) {
}
7 C++20协程入门教程
8 深入理解基于 eBPF 的 C/C++ 内存泄漏分析
9 由 HTTP Header 引起的请求超时问题排查
10 个人博客访问速度优化:CDN, 图片压缩, HTTP2
11 结合实例深入理解 C++ 对象的内存布局
12 C++ 函数可变参实现方法的演进
13 Bazel 依赖缺失导致的 C++ 进程 coredump 问题分析
14 结合实例理解流式输出的几种实现方法
15 When can glibc be built with Clang?
16 关于我面试时被问到了一个C++ Undefined Behavior之后我指出这是UB对面觉得没问题这件事
17 Can a “container_of” macro ever be strictly-conforming?
18 cloudfit-public-docs
This post is licensed under CC BY 4.0 by the author.