c++
文章平均质量分 69
承诺的永远
这个作者很懒,什么都没留下…
展开
-
C++函数覆盖,重载,隐藏的区别
c++中函数的覆盖,重载和隐藏之间的关系是很令人头疼的,又是不太容易区分的,现在此总结一下。范围的不同:函数的重载发生在类内部,而函数的覆盖,也叫函数重写,及函数隐藏发生在类间。也就是说,在同一个类中只会发生函数的重载,而在子类与父类间会发生覆盖和隐藏。声明方式的不同:在同一个类中,如果声明多个函数,只要它们的函数名相同,就会发生重载,而不管它们的参数列表及参数个数是否相同;当子类中存在与原创 2016-08-16 13:25:44 · 371 阅读 · 0 评论 -
二元成员函数适配器
自己实现的二元成员函数适配器,专门用于调用类成员函数我们实现的适配器必须要有指向成员函数的指针,一般而言,定义指向成员函数的指针格式为:T3 (T1::*fun)(T2),qizhong T3表示返回值类型,T1表示类类型,T2表示函数参数类型。// ConsoleApplication49.cpp : 定义控制台应用程序的入口点。//用于成员函数指针的适配器--将成员函数当作放函数使用/*原创 2016-11-14 19:47:19 · 404 阅读 · 0 评论 -
More Effect C++--placement delete
placement delete只有在伴随着“placement new调用而触发的构造函数”出现故障时才会被调用。当placement new调用发生故障时,编译器会在系统中国调用与placement new参数个数与参数类型一致的placement delete去恢复内存区避免内存泄漏。当使用placement new operator构建类对象时,对相应的指针实行delete ope原创 2016-10-04 21:33:24 · 552 阅读 · 0 评论 -
more effect c++---placement new
placement new是operator new的另外一种形式。对于一个已经存在的对象调用constructor是没有意义的,因为我们知道constructor是用来初始化对象的,而对象只能被初始化一次。但是有时候你是需要在原始分配的内存上构建某个对象,这时候你就可以通过placement new来完成。class Foo{ char cc; float f;原创 2016-10-04 17:49:58 · 576 阅读 · 0 评论 -
函数对象 谓词函数 函数适配器
函数对象:函数对象就是重载类中了operator()运算符的类类型对象,当使用该类实例调用operator函数时如同调用普通函数一样。从概念上来说,函数对象是用作函数的对象,但从实现来说,函数对象是实现了()函数的对象。虽然函数和函数指针也是函数对象,但只有实现了operator()函数的类对象才能保存类成员状态。函数对象的优势有以下几个:1)函数对象可以有自己的状态。当在类中定义状态变量原创 2016-10-26 19:56:55 · 590 阅读 · 0 评论 -
reinterpret_cast
reinterpret_cast的原型为:reinterpret_cast (expression).type_id必须是一个指针,引用,算术类型,函数指针,成员指针等。它可以把一个整型转换为指针,也可以把一个指针转换为整型。总结来说,reinterpret_cast可以允许任何指针类型(引用)之间的转换,整型与指针类型间的转换以及指针与足够大的整型之间的转换。reinterpret_cast原创 2016-09-29 17:34:45 · 12617 阅读 · 1 评论 -
static_cast vs dynamic_cast
static_cast vs dynamic_caststatic_cast的原型为:static_cast expression说明:该运算符把expression转换为type-id类型,但没有运行时类型检查来保证转换的安全性。在c++primer中曾经提到过对于任何可以由隐式转换进行的操作都可以有static_cast来完成。这句话说出了static_cast的其中一种用法。即用于在原创 2016-10-09 15:57:38 · 782 阅读 · 0 评论 -
构造函数语义学----copy constructor
有三种情况会调用类的copy constructor。1)明确地以一个对象的值给同类的另一对象赋值。2)当类对象被当作参数传递给函数时。3)当函数返回一个类对象时。c++中编译器copy constructor的原则是memberwise initializatior,即把每一个内建的data member和派生的data member的值逐步拷贝到目标对象中,不过他不会拷贝其中的原创 2016-09-18 15:56:23 · 482 阅读 · 0 评论 -
构造函数语义学---default constructor
C++ Annatated Reference Manual告诉我们:“default construct会在需要的时候被编译器产生出来”。关键字眼在于什么时候需要以及被谁需要。一般说来,default construct的需求方有程序员和编译器。如果程序员需要,那么他就有责任在程序中声明construct function。如果是编译器需要,那么编译器就会在程序中合成construct。当然,合原创 2016-09-17 13:38:19 · 448 阅读 · 0 评论 -
循环有序数组中查找指定值
循环数组中查找是否存在指定值的思想是:由于是循环有序数组,那就说明该数组通过循环移位可以成为有序数组,即该数组可以划分为两个有序的部分,且前一部分的元素都不小于后一部分元素,也就是形如{7,8,9,1,2,3,4}的数组。我门可以借鉴二分查找的方法解决。使用low和high指针分别指向数组首尾部元素,当low所指元素小于high所指元素时,此时数组为有序数组,可以直接使用二分法查找;当low所指元原创 2016-08-21 20:43:03 · 2172 阅读 · 0 评论 -
原路归并
// ConsoleApplication55.cpp : 定义控制台应用程序的入口点。//原地归并排序#include "stdafx.h"#include#includeusing namespace std;//将长度为n的数组逆转void reverse(int *arr, int n){ for (int i = 0; i < (n / 2); i++){ int原创 2016-08-21 20:01:43 · 302 阅读 · 0 评论 -
原地归并排序
传统二路归并排序在进行排序的过程中,需要使用长度为n的辅助空间存储原序列,再次,本文介绍一种新的排序方法---原地归并排序,该方法不需要使用额外的存取空间,空间复杂度为o(1)。原地归并排序是在二路归并的基础上进行的改进,在二路归并的归并操作中,原地归并不再使用不再使用长度为n的辅助空间,而是在原地进行归并操作。其具体步骤是;首先在已排好序的左序列中找到第一个数i,使其大于已排好序的右序列中的第一原创 2016-08-21 19:11:24 · 1255 阅读 · 1 评论 -
数组名与数组指针
数组名一般说来可以当成是一个指针常量,它的值与数组首元素的地址值相同。在很多时候,我们需要将数组名的值覆給数组指针以便对数组元素进行修改。而两者之间的错综复杂的等价关系让人捉摸不透。以下是我个人关于数组名与数组指针的一些理解,仅供参考。#include "stdafx.h" #include using namespace std; int _tmain(int argc, _原创 2016-09-11 13:24:36 · 408 阅读 · 0 评论 -
堆排序
堆排序---以二叉树的结构存储堆中元素,对于树中任一根节点而言,它的左子树和右子树要么都比它大或者比它小。堆排序分为两步:初始建堆,交换数据,重新建堆。原创 2016-08-20 15:00:46 · 349 阅读 · 0 评论 -
后缀树
后缀树的构建及查询等应用原创 2016-08-29 21:12:46 · 533 阅读 · 0 评论 -
排序
将由1,2,3组成的乱序序列数排序,使得排序后的顺序为1,2,3.核心思想:使用begin,end,current三个指针,初始时begin,current指向序列首部,end指向序列尾部。当current指向1时,current++;当current指向0时,current与begin指针的内容交换,current++,begin++;当current指向2时,current与end的内容交原创 2016-08-19 16:26:10 · 340 阅读 · 0 评论 -
c/c++字符串分割方法总结2
1. strtok()strtok 函数原型为char* strtok(char* s,char *delim),函数功能为返回delim字符串中包含字符的截断子串,第一次调用时该函数将顺序查找满足条件的分隔标志,当找到有分割标志时,则将分割标志替换成‘\0’。由于每次调用函数时,函数只返回一个分割字串,因此需要多次调用该函数。而在以后的调用中,需要传给s一个空串,至于为什么,我还没弄清楚,等原创 2016-09-09 15:50:52 · 2120 阅读 · 0 评论 -
局部静态变量
全局变量,局部静态变量,全局静态变量均存储在静态存储区,局部变量存储在栈上,而new出来的变量则存储在堆里。局部静态变量具有局部作用域,它只被初始化一次,到程序结束前都一直存在,在自身函数体内是可见的,在函数体外是不可见的。而局部变量只是在函数体内存在,函数结束时消失;全局变量则是在程序内所有函数体内都是可见的。因此,将局部变量改为静态局部变量后,作用域不变,仅改变变量的存储方式。全局静态转载 2016-08-08 13:30:08 · 1079 阅读 · 0 评论 -
thread
thread是c++标准程序库中的一个头文件,表示线程类,位于std空间中。thread对象初始化给出线程执行函数,线程对象构造完成后即可运行。在默认情况下,c++11中的子线程必须加入到主线程运行,即在主线程(main函数)中调用join函数,这样是为了避免主线程运行完毕后子线程还没有运行完成。每个程序都至少有一个thread,即main()作为起始thread,而每个新加入的thread都原创 2017-04-25 22:02:15 · 484 阅读 · 0 评论