智能指针与所有权
unique_ptr 真的是零开销吗、make_shared 省掉的那次分配是什么、循环引用怎么把对象留在内存里——用 sizeof 和 new 计数器实测。
unique_ptr 真的是零开销吗、make_shared 省掉的那次分配是什么、循环引用怎么把对象留在内存里——用 sizeof 和 new 计数器实测。
30 万次查找实测 map 比 unordered_map 慢 10 倍、sorted vector 二分反而快过 std::set、operator[] 会偷偷插入、reserve 让 push_back 快 2.4 倍——用数字建立选型直觉。
完美转发到底省掉多少次拷贝(实测 100 次调用零拷贝)、函数模板为什么不能偏特化、以及一个反常识结论:concepts 的报错行数比无约束版更多,但它把错误停在了调用点。
并查集只加"按秩合并"就从 5091ms 掉到 4.2ms(1200 倍),再加路径压缩反而没变快;线段树懒标记与朴素实现查询结果逐位相同;LRU 用 list+哈希 100 万次操作 134ms。
中间插入 10 万次 list 比 vector 快 216 倍,可反转整个表时 vector 又赢 18 倍,遍历差 33 倍——"数组好还是链表好"没有答案,只有工作负载的答案。
n 翻倍耗时到底变几倍、二分在 100 万元素上只要 20 次比较、vector 扩容的 131071 次搬移怎么摊成 1.31、同样 O(n²) 的两种写法差 13 倍——用数字代替直觉。
斐波那契 n=40 朴素递归 196.9ms vs 迭代 0.0001ms;背包一维滚动写成正序时,有 23% 的随机用例结果"碰巧正确";二维降到滚动数组是 62.5MB 变 31KB。
200 万条边的实测:CSR 建图比 vector<vector<int>> 快 7.4 倍、内存省 3 倍;邻接矩阵要 596MB 而邻接表只要 7.6MB;递归 DFS 在 10 万层崩溃而迭代版跑完 500 万层。