大数组该放哪才不撑爆栈
把大数组挪到【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】。