Skip to content

败犬日报 2024-12-13

1. 怎么安全的边遍历边删除 map

用迭代器,map::erase 返回删除元素的后一个,所以这么写:it = map.erase(it)

cpp
for (auto it = map.begin(); it != map.end();) {
    if (...) {
        it = map.erase(it);
    } else {
        ++it;
    }
}

2. 带初始化语句的 range base for (C++20)

cpp
for (int i = 0; auto [key, value] : map) { ... }

类似的,if 也可以定义 (C++17)。

for 循环的初始化语句还可以写别名声明 (using) (C++23)。

3. 神经网络相同输入会得到不同计算结果

很多时候不是故意的。

比如多线程的原子加,不能保证加法顺序,会出现误差不一致。