改用 vector 放到堆上

同样的事,这次用 vector<int>(元素放在堆上)装 400 万个数,输出所有元素之和。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

用 new 在堆上开数组

补全:用 new int[n] 在堆上开 500 万个 int,填入 0..n-1 并求和,最后 delete[] 归还。输出总和。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

递归太深改成循环

下面的 sum_to 用递归求 1+2+…+n,n = 1000 万时递归太深会撑爆栈。改成循环,输出结果。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

自己的栈代替递归

一条 100 万个节点的链:nxt[i] = i + 1,最后一个的 nxt 是 -1。递归地往下走会撑爆调用栈;补全 walk,用自己的 std::stack 走完它,输出走过的节点数。 (本题用 g++ -std=c++17 -O0 编

开始练习 →

撤销为什么天生适合用栈

第 1 步:上面是当前文本,下面是历史 第 2 步:改之前先存旧的:无 第 3 步:改之前先存旧的:x 第 4 步:撤销:弹出最近存的那份 无 无 x top x xy x 「撤销」这个功能用栈来做,是因为【0】。

开始练习 →

后退和前进要几个栈

浏览器要同时支持后退和前进,需要【0】。

开始练习 →

撤销一次之后剩下什么

运行下面这段程序: #include <iostream> #include <string> #include <vector> using namespace std; int main() {

开始练习 →

做一步撤一步

补全 do_step 和 undo:do_step 在末尾加一个字(改之前先把旧的存进 history),undo 把最近存的那份拿回来。依次做 a、b、c 之后撤销一次,输出现在的文本。 (本题用 g++ -std=c++17 -O0 编

开始练习 →

连着撤两次

同一对 do_step / undo,这次做完 a、b、c 之后连撤两次。输出现在的文本。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

撤到没得撤也不能崩

补全 undo:history 空了就返回 没得撤了,不能崩。只做了 a、b 两步,却撤三次,输出第三次的结果。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →