N 叉树的层序遍历 N 叉树的层序遍历 class Solution { public: vector> levelOrder(Node* root) {...(tmp.begin(), tmp.end()); ret.push_back(tmp); } return ret; } }; 二叉树最大宽度...二叉树最大宽度 class Solution { public: int widthOfBinaryTree(TreeNode* root) { vectorright, 2 * b + 1}); } q = tmp; } return ret; } }; 在每个树行中找最大值...在每个树行中找最大值 class Solution { public: vector largestValues(TreeNode* root) { vector<int
break test() **例2:**设置第二行为断点 break 2 ---- 查看断点 info info break ---- 删除断点 delete delete + 断点编号 delete...2 clear clear 删除指定位置的所有断点 **例:**删除函数test附近的所有断点 clear test ---- 运行程序和单步执行 run 设置完断点后 执行 run 命令,运行程序...---- next命令 next命令单步执行程序,缩写为n。也可指定执行行数。 例1: n 例2: n 3 continue continue命令继续执行,直到遇到下一个断点。缩写为c。...next与step的最大区别是,step遇到函数是会进入到函数内部的,而next不会(而是当做一条语句)。 next逐过程,step逐语句。...watch count ---- 临时修改变量 set var 某些情况我们需要让程序进入一些特殊的流程,例如进入了一个循环,我们可以修改控制循环变量的值,来跳转到指定的循环次数。
显示代码 (dbx)list //从文件开头列出代码 (dbx)list n //列出第n行代码 (dbx)list m,n //列出从m行开始的n行代码 3....设置断点 (dbx)stop at n //在第n行设置断点 (dbx)stop in funcname //在funcname函数入口处设置断点 该命令相当于VC的快捷键F9 5....删除和屏蔽断点 (dbx)delete n //删除断点,n为行号 (dbx)disable n //屏蔽断点,n为行号 (dbx)enable n //回复断点,n为行号 在使用status命令显示已经设置的断点时...单步执行程序 (dbx)next 使用该命令当执行到函数时候,不进入函数体执行函数细节,一步执行玩函数后,继续向下执行 8....从断点处继续向下执行 (dbx)cont 该命令可以用来从一个断点直接执行到另一个断点,也可以在需要的时候,跳出循环(可以在循环内外各设置一个断点)在跟踪完必要的循环次数,单循环尚未结束的时候,直接跳循环
,直到下一个断点或者结束; next(简写 n ):单步执行程序,但是遇到函数时会直接跳过函数,不进入函数; step(简写 s) :单步执行程序,但是遇到函数会进入函数; until:当你厌倦了在一个循环体内单步跟踪时...,这个命令可以运行程序直到退出循环体; until+行号: 运行至某行,不仅仅用来跳出循环; finish: 运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息; call...step (简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的 until:当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。...call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55) quit:简记为 q ,退出gdb 2、设置断点 break n (简写b n):在第n行处设置断点...如:break cb_button delete 断点号n:删除第n个断点 disable 断点号n:暂停第n个断点 enable 断点号n:开启第n个断点 clear 行号n:清除第n行的断点
"为一个客户端服务""" # 接收对方发送的数据 recv_data = client_socket.recv(1024).decode("utf-8") # 1024表示本次接收的最大字节数...response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源 response_headers += "\r\n" # 空一行与body隔开...+= "\r\n" # 空一行与body隔开 response_body = "sorry,file not found" response = response_headers...response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源 response_headers += "\r\n" # 空一行与body隔开...+= "\r\n" # 空一行与body隔开 response_body = "sorry,file not found" response = response_headers
list 10:显示第 10 行附近的代码。 2. 设置断点 break main:在 main 函数入口设置断点。 break 20:在第 20 行设置断点。...break filename.c:line:在指定文件的指定行设置断点。 3. 运行程序 run(或 r):启动程序,遇到断点会暂停。 4....frame n:切换到第 n 个栈帧(用于查看局部变量)。 8. 继续执行 continue(或 c):继续执行程序,直到遇到下一个断点或程序结束。 9....thread n:切换到第 n 个线程。 break foo thread 2:在线程 2 中设置断点。 4....死循环 原因:循环条件错误或逻辑缺陷。 解决方法: 设置断点检查循环条件。 使用 step 单步执行循环体。 3. 内存泄漏 原因:未释放动态分配的内存。
step (简写s):单步调试如果有函数调用,则进入函数;与命令n不同,n是不进入调用的函数的 until(简写u):当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。...until+行号:运行至某行,不仅仅用来跳出循环 finish:运行程序,直到当前函数完成返回,并打印函数返回时的堆栈地址和返回值及参数值等信息。...call 函数(参数):调用程序中可见的函数,并传递“参数”,如:call gdb_test(55) quit(简写q) : 退出gdb 02 设置断点: break n (简写b n):在第n行处设置断点...cb_button delete 断点号n:删除第n个断点 disable 断点号n:暂停第n个断点 enable 断点号n:开启第n个断点 clear 行号n:清除第n行的断点 info b (info...行。
1.Python 开发Web静态服务器 - 返回固定值 2.Python 开发web服务器,返回HTML页面 但是这服务端是有一个致命的性能问题,那就是采用循环接收http请求。...response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源 response_headers += "\r\n" # 空一行与body隔开...+= "\r\n" # 空一行与body隔开 response_body = "sorry,file not found" response = response_headers...response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源 response_headers += "\r\n" # 空一行与body隔开...+= "\r\n" # 空一行与body隔开 response_body = "sorry,file not found" response = response_headers
"为一个客户端服务""" # 接收对方发送的数据 recv_data = client_socket.recv(1024).decode("utf-8") # 1024表示本次接收的最大字节数...close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7788端口 server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR..."为一个客户端服务""" # 接收对方发送的数据 recv_data = client_socket.recv(1024).decode("utf-8") # 1024表示本次接收的最大字节数...header response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源 response_headers += "\r\n" #...空一行与body隔开 # 设置内容body response_body = "fat boss\r\n" response_body += "come
gdb) l //默认查看代码最中间的十行内容 注意: 经过测试发现,l 的查看策略是每次展示十行,然后想要查看的第n行位于中间,l 1 能直接能从第一行开始的原因是前面已经没有代码了,因此如果默认只输入...单行与单步 调试这个东西总得一步一步来,不然问题就不好找到了 n 单行调试 单行调试即逐过程调试,对应着VS中的 F10,即遇到函数不会进入,指令为 n (gdb) n //单行调试,不会进入函数内部...程序运行后,我们可以直接通过 until 行号 的方式跳转至指定行,这个指令通常用来跳过循环 (gdb) until 行号 //跳转至指定行 finish 函数 这个指令主要是针对函数的,直接 finish...,在不取消断点的情况下让断点失效 (gdb) disable 断点编号 //关闭断点 能关闭当然也能打开 (gdb) enable 断点编号 //打开断点 set var 设置条件 给变量设置条件...,但用熟后就会很顺手,配合我们之前学习过的 vim、gcc ,能做到像VS那样的开发环境,让我们的 Linux 使用场景更加丰富 如果你觉得本文写的还不错的话,期待留下一个小小的赞,你的支持是我分享的最大动力
=开始值:增量:结束值 循环体 end 增量默认为1,可以设置为任何值,其他的使用与C或者相关语言的一致。...第1、2行代表的就是建立一个3行5列的矩阵,第3行就是具体构建m行n列的矩阵并进行对应元素赋值操作。 结果: ?...while语句是通过判断条件表达式的真假性,从而实现循环; 其结构为: while 条件表达式 循环体 end 直接演示一个程序: n=1; while prod(1:n)n!100的最大n值,其中的prod就是实现数组元素的乘积,当小于1e100的时候,n就进行累加,直至得到最大的n值。...分析:使用pascal(3)构建了一个3x3的三角形矩阵,但是n=4,因此A_n=A(n,:)这一部分的代码相当于是错的,所以进入下一部分,即A_end=A(end,:),然后将最后一行赋值并显示在窗口
4、在gdb中,运行程序使用r或是run命令。 程序的运行,你有可能需要设置下面四方面的事。 1、程序运行参数。 set args 可指定运行时参数。...break filename:linenum 在源文件filename的linenum行处停住。...比如在循环境体中,可以设置break if i=100,表示当i为100时停住程序。...查看断点时,可使用info命令,如下所示:(注:n表示断点号) info breakpoints [n] info break [n] 这块你我只举1例: 仍然是刚才的代码,我在代码的第8行打了断点,那么在我执行...until 或 u 当你厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序直到退出循环体。
until:当厌倦了在一个循环体内单步跟踪时,这个命令可以运行程序知道退出循环体。 查看运行时数据 print(p):查看运行时的变量以及表达式。 ptype:查看类型。...例如在循环体中可以设置break ... if i = 100 来设置循环次数 删除断点 (gdb) clear location:参数 location 通常为某一行代码的行号或者某个具体的函数名。...2.3单步调试 run(r) continue(c) next(n) 命令格式: (gdb) next count:count 表示单步执行多少行代码,默认为 1 行 其最大的特点是当遇到包含调用函数的语句时...通常情况下,step 命令和 next 命令的功能相同,都是单步执行程序。不同之处在于,当 step 命令所执行的代码行中包含函数时,会进入该函数内部,并在函数第一行代码处停止执行。...注意,until 命令并非任何情况下都会发挥这个作用,只有当执行至循环体尾部(最后一行代码)时,until 命令才会发生此作用;反之,until 命令和 next 命令的功能一样,只是单步执行程序 (gdb
指令 list/l 行号:显示源代码,后续直接回车会接着上次的位置往下列,每次列10行。l后面可以接数字(行号)。 list/l 函数名:列出某个函数的源代码。 r或run:运行程序。...n 或 next:单条执行。 s或step:进入函数调用 break(b) 行号:在某一行设置断点 break 函数名:在某个函数开头设置断点 info break :查看断点信息。...breakpoints n:删除序号为n的断点 disable breakpoints:禁用断点 enable breakpoints:启用断点 info(或i) breakpoints:参看当前设置了哪些断点...(可简写为 i b) display 变量名:跟踪查看一个变量,每次停下来都显示它的值 undisplay:取消对先前设置的那些变量的跟踪 until X行号:跳至X行(中间的代码都是运行了的) breaktrace...通常用来判断循环条件,这样做可能会导致最终的值不正确。
); int n = Sum(start, end); printf("running done, result is: [%d-%d]=%d\n", start, end, n); return...0; } 这里会显示有错误,因为C89里int是不能放在for循环里的,需要改成: gcc mycode.c -o mycode.c -std=c99 -g 记得一定要加-g,不然就没法调试哦!!...删除断点 info b 显示没有断点了 run 运行程序(有断点就停下来) l + 文件名:行号 2.逐语句和逐过程 当前我设置了一个断点,可以看到断点行有一个函数。 走函数还是不走函数呢?...n ---------- 不进入函数 直接走到第17行,跳过函数 s-------------- 进入函数 可以看到,输入s就进入到了函数内部 3.finish,p,disable,enable...---------从 当前行 直接执行到 第n行 display + 变量名---------------------在 每次gdb操作后都在屏幕上显示变量名的值 undisplay + 变量名编号--
如下面的代码,整体是一个循环结构的代码,在最内层循环中,前两行代码都会做一次字符串拼接和一次打印,第三行代码会做一次乘法运算、一次字符串拼接和一次打印,三行代码的时间复杂度依次为2,2,3。...这三行代码是顺序结构,所以三行代码的时间复杂度为2+2+3=7。...对于整个循环结构,问题规模是n,内层循环需要执行n次,外层循环也要执行n次,所以整体的时间复杂度为n*n*7,即T(n)=7n^2 。...分支结构的代码,时间复杂度取各分支时间复杂度的最大值。...整个分支结构的时间复杂度按最大的分支计算,所以整体的时间复杂度为T(n)=n。
gets_s 可以设置读取的字符串长度; 读到换行符,将换行符丢弃; 如果读取到最大字符数,还没有读取到换行符或文件结尾,读取并丢弃随后的输入直至遇到换行符或EOF; 返回字符串指针,读取失败返回null...; c11的可选函数 fgets 可以设置读取的字符串长度; 读到换行符不丢弃存到数组里; 不会自动清除行缓冲区剩余数据; 返回字符串指针,读取失败返回null; scanf 该函数可以从标准输入读取内容..., &seed)); } 运行程序,输入 两个整数,打印为 2,测试输入3个值仍然打印2,是因为这个"%d %d"指定了只解析两个int,多余的将留在缓冲区中,如果后面再写一个scanf,将从缓冲区中继续解析...因为无法解析的值会继续留在缓冲区供下次使用,所以如果是循环scanf,程序就会跑飞,让你没有输入的机会,可以使用综上一节提供的示例测试一下,运行后直接输入f。...case3:返回值最大为占位符个数 1 2 3 4 5 6 7 输出: 2 2 这表明,返回值最大是占位符的个数,剩下的内容还留在缓冲区。
这是因为在循环非堵塞的过程中,client_socket执行之后就会关闭,但是由于是提前存入list组中,然后再次循环的时候,就会重复执行同一个client_socket,导致client_socket..."为一个客户端服务""" # 接收对方发送的数据 recv_data = client_socket.recv(1024).decode("utf-8") # 1024表示本次接收的最大字节数...response_headers = "HTTP/1.1 200 OK\r\n" # 200 表示找到这个资源 response_headers += "\r\n" # 空一行与body隔开...+= "\r\n" # 空一行与body隔开 response_body = "sorry,file not found" response = response_headers...close 即服务器端4次挥手之后资源能够立即释放,这样就保证了,下次运行程序时 可以立即绑定7788端口 server_socket.setsockopt(SOL_SOCKET, SO_REUSEADDR
num次,就达到继续执行n行的效果了: $ gdb gdbStep #启动调试 (gdb)b 25 #将断点设置在12行 (gdb)run #运行程序 Breakpoint...,我们在25行处断住,执行n之后,运行到26行,运行n 2之后,运行到28行,但是有没有发现一个问题,为什么不会进入到add函数内部呢?...$ gdb gdbStep #启动调试 (gdb) b 25 #在12行设置断点 Breakpoint 1 at 0x4005d3: file gdbStep.c, line 25....如果没有函数调用,s的作用与n的作用并无差别,仅仅是继续执行下一行。它后面也可以跟数字,表明要执行的次数。 当然它还有一个选项,用来设置当遇到没有调试信息的函数,s命令是否跳过该函数,而执行后面的。...可以使用continue命令(可简写为c)或者fg,它会继续执行程序,直到再次遇到断点处: $ gdb gdbStep (gdb)b 18 #在count函数循环内打断点 (gdb)run Breakpoint