虚函数的继承 今天的文章相对简单 考虑下面这个程序 class A { public: virtual void test() { cout << "A"; } }; class B: public A { public: void test() { cout << "B"; } }; class C: public B { public: void test() { cout << "C"; } }; int main() { C c; B *ptr = &c; ptr…
虚函数的继承 今天的文章相对简单 考虑下面这个程序 class A { public: virtual void test() { cout << "A"; } }; class B: public A { public: void test() { cout << "B"; } }; class C: public B { public: void test() { cout << "C"; } }; int main() { C c; B *ptr = &c; ptr…
Daily C/C++ new表达式 今天重新打开了STL源码剖析这本书,想着从头开始看一遍 没想到刚开始的allocator的部分的代码就给我卡住了,最后还是上了cppreference,才找到了比较全的资料,这里就简单说一下c++中的new表达式 首先,new表达式不仅仅是我们平时用来在堆上分配内存用的东西,他还有很多延伸出来的部分 我们来看cppreference的定义 new 表达式尝试申请存储空间,并在已申请的存储空间上,尝试构造并初始化一个无名的对象或对象数组。new 表达式返回一个指向其所构造的对象或…
条款01:视C++为一个语言联邦 C++主要的次语言总共只有四个(sublanguage) C:C++仍然是以C为基础,区块,语句,预处理器,内置数据类型,数组,指针等 Object-Oriented C++:这部分就是C with Class,类,封装,继承,多态,虚函数等 Template C++:这是C++的泛型编程,template metaprogramming (TMP 模板元编程) STL:template程序库,由容器,迭代器,算法以及函数对象所组成 每个次语言都有自己的规约,C++高效编程守则视状…
linux/list.h 简单解析 linux/list.h是linux内核中实现的链表部分 由于最近在看操作系统概念,第二章的编程练习是叫我们去写一个很简单的内核模块,其中涉及到了list.h的内容,书中也有推荐大家去看一看再完成项目 内核中的代码,至少list.h这里的代码写的还是十分易懂的,而且由于篇幅原因,这里只会介绍项目中会用到的简单的几个函数和宏 阅读本篇文章最好是自己也打开这个文件,跟着一起看效果才好 首先看链表结构的定义 struct list_head { struct list_head *ne…
C++ 初始化 我们从这样一个问题引入 #include <iostream> int ans = 1 ? std::cout << "hello", 1 : 100; int main() { std::cout << ans; return 0; } 对C++有一定了解的同学可能会知道,这个程序的输出是hello1 因为在main函数之前,我们会有一个初始化的过程,在这个过程中,我们就会输出hello,然后在初始化结束后,我们进入main,就会输出1 这种运行时的表达式会让我…
C++中的等价,相等与自定义比较 英文好的同学可以看这篇文章 链接 先看这样一段代码 std::vector< std::pair<int, std::string> > v1 = ... // v1 is filled with data std::vector< std::pair<int, std::string> > v2 = ... // v2 is filled with data std::vector< std::pair<int, std…
ARTS打卡 第一周 leetcode周赛题目 https://leetcode-cn.com/problems/maximum-subarray-min-product/ 赛场上没做出来,是一个单调栈,足以看出对单调栈理解还是不够透彻,要找时间进行一次针对性的练习 找到下一个比自己小的元素 while (!s.empty() && nums[s.top()] > nums[i]) { nxt[s.top()] = i; s.pop(); } s.push(i); 很简洁的一个模板,栈中元素比…
CSAPP总结 昨天,5月9号终于是赶着CMU的日程把csapp的东西结束了 其实书已经读完很久了,但是最后一个proxylab一直拖着没做 最后的8个lab都已经上传到我的github了 现在是最后的总结性的一篇文章,看着目录写一写,并不是说总结csapp中的知识点,而是谈谈读完书后的体会 我会针对每一章,以及每一个lab都说一下完成后的感受,以及学习时的要点,所以如果没读过这本书的同学也可以进行参阅 第一章是计算机系统漫游,就是一般性的给我们一个overview,并没有涉及到很多的细节,所以看的时候不必太在意技…
dfs剪枝技巧 这篇文章灵感来源于今天leetcode的每日一题 先看题 如果学过算法的同学应该知道,这道题是NP问题,是不存在多项式时间的解法的 最朴素的想法就是直接暴力搜索,对于每个任务来说,为他分配工人,那么复杂度就是m^n 这道题正确的做法是状压dp,以工人划分阶段,dp[i][j]表示i个工人,状态为j的最小值 转移就是dp[i][j] = min(dp[i - 1][k] + sum[j - k]) 其中k是j的子集,sum[j - k]就是这个差集的任务的总时间 但是还有一种做法是二分+dfs,因为对…
C语言标准IO中的坑 这节内容来自《C Traps and Pitfalls》 FILE *fp; fp = fopen(file, "r+"); 在我们使用这段代码打开一个文件后,我们并不能随心所欲的对文件进行读写 为了保持与过去不能同时进行读写操作程序的向下兼容性,一个输入操作不能随后直接紧跟一个输出操作,反之亦然。 如果要同时进行读写,需要在其中插入fseek函数调用 CSAPP第十章系统级IO也有提到过这个问题,其中fflush也可以达到类似的效果,貌似是和IO库的缓冲区有关 相关的原因可以在stackov…