- 博客(25)
- 收藏
- 关注
原创 C++ Primer阅读心得(第十九章)
new表达式实际上做了三个操作:1.调用operator new分配一块原始内存;2.调用构造函数创建对象;3.返回该对象的指针。delete表达式实际上做了两个操作:1.调用析构函数销毁对象;2.调用operator delete释放内存。C++只允许我们重载operator new和operator delete,也就是定制内存的分配和释放流程,而其他的内置操作我们是修改不了的。 内存的控制流程(分配与回收)由三个组件组成:重载的operator new ([])、内存不够时的处理函数new_hand
2022-03-28 22:53:50
779
原创 C++ Primer阅读心得(第十八章)
C++中的异常处理:通过try语句限定可能发生异常并处理的语句块,通过throw抛出异常对象,通过catch语句捕获该异常对象。try { // 业务代码 throw exeception("error"); // throw之后的所有语句都会被跳过} catch (exception& e) { // 异常处理代码}异常机制的优势在于可以把异常处理的逻辑和正常的业务逻辑分开编写,而如果采用了返回错误码的方式,则不得不将异常处理的逻辑和正常的业务逻辑放在.
2022-03-21 23:32:09
1040
原创 C++ Primer阅读心得(第十七章)
c++11标准库中新增了临时数据组合的tuple类型(python万岁!)。类似pair,我们可以通过make_tuple创造一个tuple,通过get获得其中的一个元素,通过tuple_size获得tuple中的元素个数,通过tuple_element获得tuple中指定元素的类型。tuple支持==、!=和<这几个关系运算符,比较时先看元素个数和类型是否匹配,然后再从左到右依次比较各个元素。//创造一个tuple<int, const char*, double>auto ex.
2022-03-18 23:25:30
1546
原创 C++ Template 基础篇(四):模板与友元
Template 基础篇-模板与友元Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第四部分。模板与友元的关系非常复杂,本人也整理得比较头疼,以下内容作为必要时的参考文献查找即可。Template 基础篇-模板与友元类友元普通类的类模板友元一对一关系一对多关系类模板的普通类友元类模板的类模板友元一对一
2017-03-11 22:28:18
3450
原创 C++ Template 基础篇(三):参数魔法
Template 基础篇-参数魔法Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第三部分。Template 基础篇-参数魔法默认实参模板的模板参数非类型参数除了使用类型作为模板的参数之外,模板参数有更多的用法,以下做个详细介绍。默认实参我们可以通过给模板指定默认实参,为用户推荐合适的默认设定,让用户在只指
2017-03-05 12:24:35
4232
2
原创 C++ Template 基础篇(二):类模板
Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第二部分。类模板定义类模板类模板中的成员函数模板类模板Tips类模板中的static成员类模板成员函数实例化类模板别名特化与偏特化类模板的特化与偏特化类模板成员特化类模板定义类模板也是公共逻辑的抽象,通常用来作为容器(例如:vector)或者行为
2017-02-26 15:57:03
20247
9
原创 C++ Template 基础篇(一):函数模板
C++ Template 基础篇(一):函数模板Template所代表的泛型编程是C++语言中的重要的组成部分,我将通过几篇blog对这半年以来的学习做一个系统的总结,本文是基础篇的第一部分。C Template 基础篇一函数模板为什么要有泛型编程函数模板定义普通函数模板成员函数模板为什么成员函数模板不能是虚函数virtual实参推断如何使用当返回值类型也是参数时实参推断时的自动类
2017-02-24 19:40:06
135523
11
原创 C++ Primer阅读心得(第十六章)
1.模板实例化:C++中的模板是一个函数或者类的蓝图,编写了不局限于类型的通用代码。模板定义本身不参与编译,而是编译器根据模板的用户使用模板时提供的类型参数生成代码,再进行编译,这一过程被称为模板实例化。用户提供不同的类型参数,就会实例化出不同的代码。2.函数模板:编译器可以根据用户使用函数模板时提供的实参,推断出函数模板的类型参数,这被称为模板实参推断。templateint compar
2016-02-21 19:02:08
1402
1
原创 C++ Primer阅读心得(第十五章)
1.继承:C++中的类通过继承形成一种层次关系,处在上层的类被称为基类(base class),处在下层的类被称为派生类(derived class)。基类中定义在派生类中共用的代码,提高代码的复用度;派生类在继承了基类代码的基础之上,定制自身特定的代码,增强代码的灵活性。2.类派生列表:派生类通过使用类派生列表指明它是与哪些基类存在继承关系。class Base {};class D
2016-02-12 22:44:20
658
原创 Google gflags使用说明
gflags是什么:gflags是google的一个开源的处理命令行参数的库,使用c++开发,具备python接口,可以替代getopt。gflags使用起来比getopt方便,但是不支持参数的简写(例如getopt支持--list缩写成-l,gflags不支持)。如何安装使用gflags:安装:请访问地址https://code.google.com/p/gflags/,下载
2014-04-15 13:29:17
63619
2
原创 C++ Primer阅读心得(第十四章)
1.不能重载的操作符 : : .* . ?:这四个。2.因为重载操作符并不能保证子表达式的求值顺序,所以&&和||的短路特性不能得到保证, , 的从左向右求值顺序也得不到保证,所以应避免重载&& ||和 , 。3.默认的operator&可以满足一般的使用要求,而重载operator&之后会造成很多问题(尤其是返回类型与默认返回类型不一致时),所以除非特殊情况,避免重载op...
2008-04-09 01:15:00
1301
1
原创 C++ primer阅读心得(第十三章)
1.类的复制控制包括拷贝构造函数、赋值操作符和析构函数三个成员,这三个成员和构造函数一起控制着类对象的构造、复制和回收,如果一个类没有定义它们,那么编译器会为该类自动生成默认构造函数、默认拷贝构造函数、默认赋值操作符和默认析构函数。如果一个类自己提供了三成员之一(例如:拷贝构造函数),那么另外两个成员也最好自己定义,三成员总是一起出现被称为“复制控制三法则”(难道英文原文是trinity?三位一体
2008-02-07 15:43:00
1441
1
原创 C++ Primer阅读心得(第十二章)
1.数据抽象与封装:数据抽象是一种依赖于接口和实现分离的编程技术,用户只需要了解接口就可以使用,而不用去关心实现细节。封装是将低层次的元素组合起来形成新的、高层次实体的技术,函数是一些简单语句的封装。C++的类通过访问控制符提供数据抽象和封装,public标识了类的接口定义了数据抽象,private封装了类的实现细节。在类的定义中,同一个访问控制符可以出现多次,其作用范围从出现到下一个控制符或者
2008-01-27 17:42:00
987
原创 C++ Primer阅读心得(第十章、第十一章)
1.泛型算法是独立于容器的;泛型算法不执行容器操作,也绝对不会改变容器的大小;泛型算法只通过迭代器与容器联系。2.泛型算法可分为三类:1).只读算法,只是读取迭代器范围内的值不做任何修改,例如:find find_first_of accumulate;2).写算法,不仅读取而且还会修改迭代器范围内的值,这里需要注意泛型算法不负责被写入迭代器范围大小,使用者需要自己确保空间足够,例如:fil
2008-01-23 22:27:00
1125
原创 C++ Primer阅读心得(第八章、第九章)
1.STL中的顺序容器包括:vector list和deque三种,此外还有三种顺序容器适配器stack queue和priority_queue.2.容器的拷贝构造函数只能复制同类型的容器,如果要操作不同的容器,可以使用两个迭代器的版本。也可以将数组的上下界传入,通过数组构造容器。例:vectorint>ivec1;listint>ilist;inta[10]=...{..
2008-01-23 00:24:00
1203
原创 C++ Primer阅读心得(第七章)
1.重载的函数在程序员看来是同一个函数名,但是编译之后其实是两个名字。例:int test(int a, int b)和float test(float a, float b),编译之后函数名可能是_int_int_test和_float_float_test。2.main函数不能重载(汗!)3.仅仅返回值类型不同的两个函数不构成重载,非引用/指针形参与const非引用/指针形参不构成重
2008-01-21 22:09:00
1471
原创 C++ Primer阅读心得(第六章)
1.C++语言使用调用操作符(一对括号)实现函数调用。调用操作符的操作数是函数名和参数列表,返回值是函数的返回值。(醍醐灌顶啊~~)2.尽量少使用非const类型作为函数的形参,因为这将会有诸多限制,例如:不能传const对象,不能传递常量表达式,不能传递右值(变量组成的表达式)等等。3.指向指针的引用:例 int *&refp;4.数组作为实参传递给函数时,最好使用指针、长度,或者
2008-01-18 00:54:00
2207
原创 C++ Primer阅读心得(第四章、第五章)
1.%操作符:当%的两个操作数都为正时,结果为正(废话);当两个操作数 都为负数时,结果为负;当两个操作数 一正一负时,结果取决于机器。2.赋值操作符是右结合的,而算术运算符是左结合的。例如: a+b+c就是(a+b)+c而a=b
2008-01-14 22:45:00
1135
原创 C++ Primer阅读心得(第三章)
1. const_iterator和const iterator:在容器中,存在一个const_iterator的迭代器,对这个跌迭代器使用*号(解引用)将返回一个const对象。也就说使用const_iterator只能只读的访问容器中的数据,但是const_iterator本身可以修改。而const iterator就是普通的const对象,一旦设定就不能改变了。(怎么和const指针与指向c
2008-01-13 01:23:00
1227
原创 C++ Primer阅读心得(第二章下)
1.变量声明和定义的区别: 定义指的是为变量分配内存空间,并可以赋初值;声明指的是指定变量的类型和名称。定义本身也是一种生命。一般使用extern关键字来进行变量的声明。由此可见,区分声明和定义的关键在于是否分配了内存空间。例如: int i = 0; //定义,既分配了空间,又赋初值int i; //定义,只分配了空间(实际上编译器
2008-01-11 01:55:00
1071
原创 C++ Primer阅读心得(第一章、第二章上)
1.在C++中存在左值(lvalue)和右值(rvalue)的区别:左值是地址,可以出现在赋值语句的左边和右边;右值是变量的值,只可以出现在赋值语句的右边。2.对象的定义:内存中有类型的区域。首先需要是内存中的一段(010001100101...),其次还需要有个类型。3.字符串字面值的连接:若干个字符串字面值之间,如果只有空格、制表符(/t)和换行符(/n)存在,那么他们会被自动连
2008-01-10 00:09:00
1788
1
原创 k-路归并的算法
假设有k个已经排列好的序列A1 A2 ... Ak,现想要将它们归并为一个序列,如何归并?设k个序列的元素总和为n。答:存在时间复杂度为O(nlgk)的算法,具体如下: 1.从k各序列中各取出最小的一个元素组成序列B,由B建立一个大小为k的小顶堆(min-heap) 2. 取B的第一个元素(堆顶)放置在结果序列中,查看该元素的归属i(1=
2007-12-03 00:46:00
3998
原创 新blog开张了!!!
我申请这个blog的目的其实是自己的网络记事本,每天自己学习编程的心得都会写在这里,欢迎大家猛拍砖~~ 废话少说,下面我从正在学习的算法导论开始记起。
2007-12-03 00:25:00
1173
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人