照出迭代器失效

场景:一个小程序跑了很久都没出过问题,直到换了一台机器、换了一批数据,它开始偶尔输出乱码。代码评审时有人说:这里有未定义行为。 任务:先用 AddressSanitizer 编译并运行 ~/work/ub/dup.cpp,看它报什么,再把问

开始练习 →

崩溃栈顶是哪个函数

场景:一个库存程序处理一批命令时突然 Segmentation fault,除此之外什么都没说。 任务:在 ~/work/crash 里编译运行 crash.cpp(输入是 ops.txt),找出程序崩溃时正在执行的函数的全名(带命名空间)

开始练习 →

按值传容器

函数参数写成 std::vector<std::string> v(按值传递),每调用一次都会【0】。

开始练习 →

两种拼接

循环里 s = s + w; 比 s += w; 慢得多,是因为前者【0】。

开始练习 →

数一数拷贝了多少字符

对每个词,s = s + w 要拷贝 当前长度 + 词长 个字符,s += w 只拷贝词长个。算出两种写法各拷贝多少字符,输出 前者/后者。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

热循环里的整份拷贝

场景:一个客户统计程序在几百人时很快,八千人时要跑十来秒。代码只有二十行,看不出哪里有复杂的计算。 任务:找到 ~/work/perf/stats.cpp 热循环里白白浪费的那一步,让 8000 个客户在 2 秒内出结果,输出不变。用 g+

开始练习 →

越拼越慢的字符串

场景:一个把单词用逗号接起来的小工具,几百个词瞬间完成,八万个词却卡了十几秒。 任务:改写 ~/work/join/join.cpp 的拼接方式,让 8 万个词在 2 秒内出结果,输出一字不变。用 g++ -std=c++17 -O2 编译

开始练习 →

Makefile 的依赖行

Makefile 里写着 main.o: main.cpp inventory.h,它的意思是【0】。

开始练习 →

make -q 返回零

在工程目录里运行 make -q inv,退出码是 0,说明【0】。

开始练习 →

库存命令的核心逻辑

逐条处理命令:add 且数量 > 0 入库;take 且数量 > 0 时够就出库、不够记一次「不足」;其它都算无效。输出各物品库存(按名字、逗号隔开)以及 无效次数、不足次数。 (本题用 g++ -std=c++17 -O0 编

开始练习 →