大数组该放哪才不撑爆栈

把大数组挪到【0】,就不会撑爆调用栈。

开始练习 →

递归一万层没问题

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

开始练习 →

一个栈帧里的数组多大

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

开始练习 →

把大数组挪成全局

下面的程序把 300 万个 int 的数组放在 main 里(约 12 MB,超过默认的栈),一跑就崩。把它挪成全局变量,输出所有元素之和。 (本题用 g++ -std=c++17 -O0 编译。)

开始练习 →

改用 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】。

开始练习 →