
C++
Rain722
这个作者很懒,什么都没留下…
展开
-
pair实现priority_queue
只需要自定义比较函数即可!#includeusing namespace std;#define pii pairclass mycomparison{ public: bool operator () (const pii &n1, const pii &n2) const { if(n1.first == n2.fir原创 2017-03-08 15:10:42 · 1440 阅读 · 0 评论 -
C++中的函数重载
C++ 中的运算符重载 你可以重新定义或重载的大部分 C++ 已有的操作符。因此,程序员可以像使用用户自定义类型一样使用操作符。 重载操作符是一类函数,它们就是对已有的运算符重新进行定义,赋予其另一种功能,以适应不同的数据类型。像任何其它函数,重载运算符也有返回类型和参数列表。Box operator+(const Box&);声明加法运算符可以用来使两个原创 2017-02-12 22:51:24 · 612 阅读 · 0 评论 -
C++类(Class)的定义与实现
转载自:http://www.cnblogs.com/mr-wid/archive/2013/02/18/2916309.html(但是他的内容中有一些错误)一、"类" 的介绍 在C++中, 用 "类" 来描述 "对象", 所谓的"对象"是指现实世界中的一切事物。那么类就可以看做是对相似事物的抽象, 找到这些不同事物间的共同点, 如自行车和摩托车, 首先他们都属于"对象",转载 2017-02-12 17:01:38 · 41655 阅读 · 10 评论 -
template显式具体化、显式实例化、隐式实例化
模板的局限性:假设有如下模板函数:template void f(T a, T b){...}通常,代码假定可执行哪些操作。例如,下面的代码假定定义了赋值,但如果T为数组,这种假设将不成立:a = b;同样,下面的语句假设定义了if(a > b)另外,为数组名定义了运算符>,但由于数组名为地址,因此它比较的是数组的地址,而这可能不是您希望的。下面的语句假定为原创 2017-02-11 20:59:02 · 4299 阅读 · 3 评论 -
函数模板template-重载的模板
需要多个对不用类型使用同一种算法的函数时,可使用模板。如上篇程序所示链接。然而,并非所有的类型都使用相同的算法。为满足这种需求,可以像重载常规函数定义那样重载模板定义。和常规重载一样,被重载的模板的函数特征标必须不同。例如,下面的程序新增了一个交换模板,用于交换两个数组中的元素。原来的模板的特征标为(T &, T&),而新模板的特征标为(T [ ], T [ ], int)。注意,在后一个模板原创 2017-01-22 22:48:20 · 587 阅读 · 0 评论 -
函数模板template
现在的c++编译器实现了c++新增的一项特性——函数模板。函数模板是通用的函数描述,也就是说,他们使用泛型来定义函数,其中的泛型可以用具体的类型(如int或double)替换。通过将类型作为参数传递给模板,可使编译器生成该类型的函数。由于类型是用参数表示的,因此模板特性有时也被称为参数化类型(parameterized types)。可以这样建立一个交换模板template void S原创 2017-01-22 17:30:01 · 471 阅读 · 0 评论 -
【C++11】新特性——引入nullprt
1. 引入nullptr的原因引入nullptr的原因,这个要从NULL说起。对于C和C++程序员来说,一定不会对NULL感到陌生。但是C和C++中的NULL却不等价。NULL表示指针不指向任何对象,但是问题在于,NULL不是关键字,而只是一个宏定义(macro)。1.1 NULL在C中的定义在C中,习惯将NULL定义为void*指针值0:[cpp] view转载 2016-05-29 20:03:08 · 800 阅读 · 0 评论 -
编程中无穷大的设定 很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1 但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相
很多人可能设为0x7fffffff,这个数的确是32-bit int的最大值,符号位为0,其他的都是1但在很多情况下,0x7fffffff会出现错误,比如溢出,这样两个无穷大数相加会变成负数,还有如在做dijkstra求最短路时,当做松弛操作,判断if (d[u]+w[u][v]为了尽量避免以上的错误,我们可以改变无穷大的设定,可以将0x3f3f3f3f设为无穷大,0x3f3f3f转载 2016-04-29 19:43:31 · 12638 阅读 · 1 评论 -
inline函数的定义放在头文件中
inline是加在实现上,就算加在声明上,编译器也会忽略掉。内联展开是在编译时进行的,只有链接的时候源文件之间才有关系。所以内联要想跨源文件必须把实现写在头文件里。如果一个inline函数会在多个源文件中被用到,那么必须把它定义在头文件中。注意:将函数的定义({…}之间的部分)放在头文件中是强制的,除非该函数仅仅被单个 .cpp 文件使用。尤其是,如果你将内联函数的定义放在 .cpp 文件转载 2017-12-12 20:22:13 · 3208 阅读 · 0 评论