随笔分类 - C++
C++学习笔记
摘要:1.快速排序 O(nlog(n)) 不稳定排序 选取第一个数为哨兵 将比哨兵小的数都交换到前面,比哨兵大的数都交换到后面 返回哨兵位置,根据哨兵位置划分左右区间重复第二步,直到各区间只有一个数。 int partition(vector<int> &nums, int left, int right
阅读全文
摘要:二分查找算法以及常见的边界细节问题 1. 基本的二分搜索 这个场景是最简单的,即二分搜索一个数,如果存在,返回其索引,否则返回 -1。 可以写出以下代码 int binarySearch(int[] nums, int target) { int left = 0; int right = nums
阅读全文
摘要:main函数执行之前和之后都做了什么? 我们都知道程序的执行是从main函数开始的,main函数是用户定义的执行入口点,但是在main函数之前和main函数之后编译器都做了什么工作呢? 1.main函数执行之前 设置栈指针 初始化static静态变量和global全局变量,即.data段的内容 对.
阅读全文
摘要:linux下gdb如何处理coredump错误 在编写C++程序中,我们经常会遇到一种错误,segment fault, 这种coredump错误 会导致程序运行时异常退出或者终止,这种错误没有明显错误提示信息,该如何定位错误呢? 在linux下,这种错误会生成的一个叫做core的文件,这个core
阅读全文
摘要:#C++中的引用计数机制 引用计数是为了防止内存泄露而产生的。基本想法是对于动态分配的对象,进行引用计数,每当增加一次对同一个对象的引用,那么引用对象的引用计数就会增加一次,每删除一次引用,引用计数就会减一,当一个对象的引用计数减为零时,就自动删除指向的堆内存。 在C中,手动释放资源,不是最佳实践。
阅读全文
摘要:
三、异常 条款9:利用destructor避免泄露资源 把资源封装在对象内,通常可以在exception出现时避免资源泄露 条款10:在构造函数内阻止资源泄露 C++仅仅能删除被完全构造的对象(fully constructed objects),只有一个对象的构造函数完全运行完毕,这个对象才被完全
阅读全文

摘要:一、基础议题 条款1:仔细区别pointers和references 指针使用*和->,引用使用“.”引用必须指向一个已初始化的对象,不能为null,而指针可以指向某个对象,也可以为null指针可以被重新赋值指向另一对象,而引用不可变更指向。 条款2:最好使用C++转型操作符 使用C++的转型操作符
阅读全文
摘要:七、模板与泛型编程 41.了解隐式接口和编译器多态 1.类和模板都支持接口和多态。 2.类的接口是显式定义的——函数签名。多态是通过虚函数在运行期体现的。 3.模板的接口是隐式的(由模板函数的实现代码所决定其模板对象需要支持哪些接口),多态通过模板具现化和函数重载解析在编译期体现,也就是编译期就可以
阅读全文
摘要:六、继承与面向对象设计 32.确定你的public继承塑模出is-a关系 public继承意味着is-a。适用于base class身上的每一件事情也一定适用于derived class身上。每一个derived class对象也都是一个base class对象。 33.避免遮掩继承而来的名称 编译
阅读全文
摘要:五、实现 26.尽可能延后变量定义式的出现时间 尽可能延后变量定义式的出现,甚至应该尝试延后这份定义直到能够给他初值实参为止,这样不仅能避免构造和析构非必要对象,避免无意义的default行为,也可增加程序的清晰度并改善程序效率。 27.*尽量少做转型动作 const_cast通常被用来将对象的常量
阅读全文
摘要:三、资源管理 13.以对象管理资源 1.为了防止资源泄漏,请使用RAII对象,在构造函数里面获得资源,并在析构函数里面释放资源. 2. 引用计数型智慧指针(RCSP):持续追踪多少个指针指向该资源,无人指向他时自动删除该资源,如unique_ptr、shared_ptr和auto_ptr(现在已经没
阅读全文
摘要:二、构造/析构/赋值运算 05.了解C++默默编写并调用那些函数 如果自己不声明, 编译器就会暗自为class创建一个default构造函数、一个copy构造函数、一个copy assignment操作符(代码合法有意义时编译器才会生成),以及一个析构函数 并且所有的这些都是public且inlin
阅读全文
摘要:一、让自己习惯C++ 01.视C++为一个语言联邦 c++是多重范型编程 语言,视c++包括4种次语言: 1:C 2:Object-Oreinted C++; 3:Template C++; 4:STL(template程序库,包括容器、迭代器、算法和函数对象)。 02.尽量以const,enum,
阅读全文