主页

C++虚函数剖析 从二级指针角度

写在前面 一直说 C++的多态, 其实底层原理是虚函数支持, 那么虚函数的底层原理呢, 之前一直停留在表面, 直到后来看了很多书籍/视频/博客文章, 才有了一点深刻的理解, 下面来具体看看如何通过 C 指针进行虚函数的调用, 相当于对 C 指针的一个复习, 同时也是对 C++虚函数底层原理的一个理解. 主要内容有如下几点: 二级指针的复习 通过对象首地址访问虚函数表 通过虚函数表调用虚函数 基类的私有虚函数, 可以通过指针运算访问! 这也是 C++灵活性的一个问题(缺陷) 测试代码可以参考我的 GitHub: Learn_C_CPP/oop_ood/virtual_func/read-vfunc.cpp at master · zorchp/Learn...

阅读更多

Git 常用操作

配置 git 环境 基本信息 git config --global user.name <your github name> git config --global user.email <your github email> # check : $ cat ~/.gitconfig [user] name = xxx email = yy@zz.com 这里建议采用下面的命令保存秘钥, 否则每次都要输入很麻烦(非自己机器请不要保存): git config --global credential.helper store 可以看到, 这些配置其实都是在$HOME/.gitconfig 文件中写入某些条目而已. ssh 公钥生成 ...

阅读更多

Npm相关操作

gitbook install 报错TypeError: cb.apply is not a function cd /opt/homebrew/lib/node_modules/gitbook-cli/node_modules/npm/ sudo npm install graceful-fs@latest --save gitbook下: cd .gitbook/versions/3.2.3/node_modules/npm npm install graceful-fs@latest --save Gitbook build stopped to work in node 12.18.3 · Issue #110 · GitbookIO/gitbook-cli;...

阅读更多

多线程压缩解压缩神器 pigz 使用方法总结

写在前面 首先要熟悉两个不同的操作: tar: 用于打包, 打包前后的文件大小不会有区别, 仅仅是将多个小文件打包了, 最后的结果是.tar文件 zip: 压缩格式, 可以由tar命令指定压缩格式, 会执行压缩, 但是单线程执行会导致效率比较低, 最后的结果是 .zip或者.tar.gz 可以做个实验对比一下, 这里先生成一些小的文件, 通过 Shell 来做: #!/bin/bash dir=./files tar_file=only_tar.tar targz_file=with_gzip.tar.gz # generate files for test if [ ! -d ${dir} ]; then mkdir ${dir} for...

阅读更多

C++动态数组的释放问题,delete[]是不是必须的

写在前面 好久没认认真真写博客了, 最近一直忙着实习, 写的一些东西都发在内网了. 这次来总结一下 C++中动态数组的释放, 实际上有两种情况, 针对不同的情况也有不同的处理方式, 当然最保险的还是对应, 即: new对应 delete new[]对应 delete[] 最为保险, 但是昨天看了一个笔试题, 竟然多选, 那么就可以好好思考一下了. 下面分两种情况来分析, 即: 栈内存容器(complex 模板类)以及 POD 类型, 即 C-style 的类型, 例如 int, float 等等 堆内存容器(vector 这种动态数组肯定是堆内存), 以及用户自定义类型. 情况 1: 栈内存/POD POD 类型 来看下面的代码: #incl...

阅读更多

二叉树的括号表示(广义表示)转换

写在前面 笔试时候发现很多二叉树括号表示的题目, 了解一下. 转换规则 举例 mhy 的题目: 4.假设存在一棵树,其括号表示为A(B(F,G),C(H, (L)),D(J,K(M),E(N(O),P)),若将该树转换为二叉树,则该二叉树的后序遍历为 () 。 A GLIHFMKJPNEODCBA B BFGCHILDJKMENOP C ABGLIHEMKJPNEODC D GFLIHMKJOPNEDCBA

阅读更多

堆地址和栈地址的区分

printf("main addr: %p\n", (void *)main); int a = 1; printf("stack addr: %p\n", &a); int *p = (int *)malloc(sizeof(int)); printf("heap addr: %p\n", p); free(p); /* main addr: 0x102257ee4 stack addr: 0x16dbaab24 heap addr: 0x600002c28050 */ 只是一个很简单的区分方法, 实际上还要受制于架构和指令集等情况.

阅读更多

Python牛客acm模式io题目答案

牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ; 1 import sys for l in sys.stdin: a, b = l.split() print(int(a) + int(b)) 2 import sys n = input() for l in sys.stdin: a, b = l.split() print(int(a) + int(b)) 3 import sys for l in sys.stdin: a, b = l.split() if a != '0' or b != '0': print(int(a) + int(b)) ...

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits