败犬日报 2024-10-08
1. std::unordered_map 扩容
load_factor 即元素数除以桶数,如果这个数大于 max_load_factor 会触发 rehash(扩容到多大应该是实现定义)。
2. lambda 递归
用 std::function,但是这个可能属于 std::function 递归而不是 lambda 递归:
cpp
int main() {
std::function<int(int)> func = [&func](int x) {
if (x == 0) {
return 1;
}
return x * func(x - 1);
};
func(5);
}
用 y 组合子,注意要指定返回值:
cpp
int main() {
auto func = [](auto self, int x) -> int {
if (x == 0) {
return 1;
}
return x * self(self, x - 1);
};
func(func, 5);
}
用 reducing this(C++23 新增):
cpp
int main() {
auto func = [](this auto &self, int x) {
if (x == 0) {
return 1;
}
return x * self(x - 1);
};
func(5);
}
3. 结构化绑定不能赋值给已有变量
只能用 std::tie 给已有变量赋值,不能同时创建变量 & 赋值给已有变量。
注:结构化绑定即 auto [a, b] = ...;
C++17 新增。
4. 数据库联合索引 (b, a) 如果 where 条件是 a = 1 and b = 1; 会优化成先查 b = 1 吗
MySQL 实测是会的。可能看实现?
5. 新闻时间
今年诺贝尔物理学奖颁给了“人工神经网络”,要不咱改个名吧。