Post

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

https://lulaoshi.info/python/asyncio/basics.html

This post is licensed under CC BY 4.0 by the author.

Trending Tags