
c++
白话机器学习
10年IT从业经验,人工智能高级算法工程师、优快云博客专家、阿里云专家、《2023博客之星马龄赛道11-15年》第一名、《2023博客之星,城市赛道》长春TOP1,优快云付费资源项目实践专家
展开
-
类的静态数据成员
有时需要为某个类的所有对象分配一个单一的存储空间。在C语言中,可以用全局变量,但这样很不安全。全局数据可以被任何人修改,而且,在一个项目中,它很容易与其他的名字相冲突。如果可以把一个数据当成全局变量那样去存储,但又被隐藏在类的内部,并且清楚地与这个类相联系,这种处理方法当然是最理想的了。这一点可以用类的静态数据成员来实现。类的静态成员拥有一块单独的存储区,而不管我们创建了多少个原创 2013-07-04 16:08:17 · 1490 阅读 · 0 评论 -
C++ Windows Hook 消息钩子 详解
本文完整测试工程的源码免积分下载地址:http://download.youkuaiyun.com/detail/zy_dreamer/5336484我们先来简单的了解一下基本概念:Hook是WINDOWS提供的一种消息处理机制,它使得程序员可以使用子过程来监视系统消息,并在消息到达目标过程前得到处理。HOOK链 WINDOWS提供了几种不同类型的HOOKS;不同的HOOK可以处理不同的消息。原创 2013-05-06 15:11:22 · 5426 阅读 · 1 评论 -
VS2008 应用程序配置不正确,未能启动该应用程序。重新安装程序可以修复此问题。解决方法
有时候我们把自己编译好的exe直接拷贝到别的电脑上使用时,如果那台电脑没装vs,一般程序无法运行提示:应用程序配置不正确,未能启动该应用程序。重新安装程序可以修复此问题。这是由于一般我们编译的程序都是使用的共享DLL,所以不一定保证其他机器上都有。如果使用静态DLL的话生成的程序可能会很大。这里有一个简单的方法,我也不知道具体原理首先设置工程为Release,否则Debug下可能提原创 2013-05-20 09:09:10 · 1409 阅读 · 0 评论 -
学习C++ 必看的书,你看过几本了?
我会陆续把这些书的电子版放到我的资源中,需要的朋友可以下载,都是免积分的。C++PrimerC++沉思录Effective STLeffective c++STL 源码剖析Essential C++Exceptional C++Inside the C++Object ModelModern C++ DesignMore Effective C++Mor原创 2013-05-18 20:56:36 · 1376 阅读 · 2 评论 -
C++ 找到进程中所加载的某一模块的基地址
MEMORY_BASIC_INFORMATIONtypedef struct _MEMORY_BASIC_INFORMATION { PVOID BaseAddress; PVOID AllocationBase; DWORD AllocationProtect; DWORD RegionSize; DWORD State; DWORD Prot原创 2013-05-06 15:30:13 · 3164 阅读 · 0 评论 -
MFC程序编译时VS2008提示无法打开包含文件<afxcontrolbars.h>
这个头文件包含在“stdafx.h”中造成这个问题的主要原因是这个工程原来可能是在打了SP1补丁的VS2008下创建的,SP1是微软08年发布的一个补丁,用于改善VS的一些特性。可能是SP1后加入了这个头文件,用于提供对功能区和控制条的MFC支持#include // MFC support for ribbons and control bars一种解决方法就是安装SP1以原创 2013-05-06 10:13:16 · 2153 阅读 · 0 评论 -
【转载】fatal error C1010: unexpected end of file while looking for precompiled header directive
在编译VC++6.0是,出现fatal error C1010: unexpected end of file while looking for precompiled header directive的错误.解决方法:1、如果发生错误的文件是由其他的C代码文件添加进入当前工程而引起的,则Alt+F7进入当前工程的 Settings,选择C/C++选项卡,从Category组合框转载 2013-05-17 14:17:00 · 617 阅读 · 0 评论 -
C++使用共享内存实现进程间通信
C++使用共享内存实现进程间通信文件映射是一种实现进程间单向或双向通信的机制。它允许两个或多个本地进程间相互通信。为了共享文件或内存,所有的进程必须使用相同的文件映射的名字或是句柄。为了实现共享文件,第一个进程先调用CreateFile方法。接下来调用CreateFileMapping方法来创建一个文件映射对象。并为文件映射指明一个句柄和名称。由于事件,信号,互斥对象和文件映射等这些内核对原创 2013-05-02 20:00:08 · 8631 阅读 · 0 评论 -
C++ WM_COPYDATA 实现进程通信
完整工程可以到:http://download.youkuaiyun.com/detail/zy_dreamer/5385153 下载基于MFC用于存储数据的自定义结构体:struct MSG_STRUCT { wchar_t msg[256];};发送端,发送按钮响应事件的代码void CSendWM_COPYDATADlg::OnBnClickedSendmessag原创 2013-05-15 21:49:43 · 1772 阅读 · 0 评论 -
C++中的临时变量
许多人对临时变量的理解仅仅限于: string temp; 其实,从C++的观点来看,这根本就不是临时变量,而是局部变量. C++的临时变量是编译器在需要的时候自动生成的临时性变量,它们并不在代码中出现.但是它们在编译器生成的二进制编码中是存在的, 也创建和销毁.在C++语言中,临时变量的问题格外的重要,因为每个用户自定义类型的临时变量都要出发用户自定义的构造函数和析构函数转载 2013-05-16 10:36:31 · 861 阅读 · 0 评论 -
8.将构造函数和非成员函数“虚拟化”
在讨论内容之前先看下面的一个程序,它用来进行新闻报道工作,每一条新闻报道都由文字或图片组成。class NLComponent { //用于 newsletter componentspublic: // 的抽象基类... //包含至少一个纯虚函数};class TextBlock: public NLComponent {public:... // 不包含纯虚函数};clas原创 2013-05-16 10:17:09 · 762 阅读 · 0 评论 -
智能指针 auto_ptr 源码解析
原文地址:http://www.cppblog.com/SmartPtr/archive/2007/07/05/27549.htmlauto_ptr是当前C++标准库中提供的一种智能指针,或许相对于boost库提供的一系列眼花缭乱的智能指针, 或许相对于Loki中那个无所不包的智能指针,这个不怎么智能的智能指针难免会黯然失色。诚然,auto_ptr有这样那样的不如人意,以至于程序员必须像使用”转载 2013-05-10 16:11:52 · 700 阅读 · 0 评论 -
explicit构造函数
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”转载 2013-05-10 16:29:34 · 558 阅读 · 0 评论 -
C,C++中的static
在C和C++中,static都有两种基本的含义,并且这两种含义经常是互相有冲突的:1) 在固定的地址上分配,也就是说对象是在一个特殊的静态数据区上创建的,而不是每次函数调用时在堆栈上产生的。这也是静态存储的概念。2) 对一个特定的编译单位来说是本地的(就像我们在后面将要看到的,这在C++中包括类的范围)。这里static控制名字的可见性,所以这个名字在这个单元或类之外是不可见的。这原创 2013-07-04 15:42:13 · 760 阅读 · 0 评论 -
计算一段程序的执行时间
// 计算程序执行时间.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include void do_something(){ for(int i=0;i<100000;i++) for(int j=0;j<10000;j++)原创 2013-07-01 11:27:31 · 857 阅读 · 0 评论 -
给定一个字符串,里面会有连续重复出现的字符,比如aabbbcdde,要求把连续重复的字符只保留一个,比如上面的字符串处理之后就变成了abcde。
void WipeOutRepeatStr(char* str){ char *p,*q; p=q=str; while(*q!='\0') { q++; cout<<*p; while(*p==*q) { q++; } p=q; }}原创 2013-06-20 16:56:10 · 2558 阅读 · 0 评论 -
字符串和字符串结束标志
在C语言中,将字符串作为字符数组来处理,例如定义一个字符数组长度为100,而实际有效字符只有40个,为了测定字符串的实际长度,C语言规定了一个字符串结束标志,以字符 '\0' 代表,如果有一个字符串,其中第10个字符为 '\0' 则此字符串的有 效字符为9个,也就是说,在遇到字符 '\0' 时,表示字符串结束,由它前面的字符组成字符串。 系统对字符串常量也自动加一个 '\0' 作为结束符转载 2013-06-20 16:51:50 · 3110 阅读 · 0 评论 -
内联函数之一
在C中,保护效率的一个方法是使用宏( m a c r o )。宏可以不用普通函数调用就使之看起来像函数调用。宏的实现是用预处理器而不是编译器。预处理器直接用宏代码代替宏调用,所以就没有了参数压栈、生成汇编语言的CALL、返回参数、执行汇编语言的RETURN的时间花费。所有的工作由预处理器完成,因此,不用花费什么就具有了程序调用的便利和可读性。C++中,使用预处理器宏存在两个问题。第一个原创 2013-06-19 16:32:03 · 771 阅读 · 0 评论 -
C++ 生成三次贝塞尔曲线
// 三次贝塞尔.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include #include #define NUM_STEPS 30 //越大,曲线越密,越逼近using namespace std;class CvPoint{public原创 2013-06-08 11:21:54 · 6464 阅读 · 4 评论 -
C++编程开发学习的50条建议
原文:http://www.jizhuomi.com/software/283.html每个从事C++开发的朋友相信都能给后来者一些建议,但是真正为此进行大致总结的很少。本文就给出了网上流传的对C++编程开发学习的50条建议,总结的还是相当不错的,编程学习者(不仅限于C++学习者)如果真的理解了这些建议,相信能够在学习时准确的抓住侧重点,少走弯路。下面列出这50条建议:转载 2013-06-08 15:21:41 · 852 阅读 · 1 评论 -
C++数据类型的大小
#include using namespace std;void main(){ cout<<"size of bool: "<<sizeof(bool)<<" bytes"<<endl; cout<<"size of char: "<<sizeof(char)<<" bytes"<<endl; cout<<"size of unsigned char: "<<s转载 2013-05-28 09:13:23 · 713 阅读 · 0 评论 -
引用计数的一种实现
#include using namespace std; class U_Ptr{ private: friend class HasPtr; int *ip; size_t use; U_Ptr(int *p):ip(p), use(1) { } ~U_Ptr() { delete ip; } }转载 2013-05-27 20:43:16 · 503 阅读 · 0 评论 -
itoa的内部实现
#include #include char *myitoa(int num,char *str,int radix);int main() { int number = -123456; char string[25]; myitoa(number, string, 16); printf("integer = %d strin转载 2013-04-19 15:32:09 · 554 阅读 · 0 评论 -
利用环境变量向子进程传递一个参数
父进程调用下面函数,创建一个子进程并设定环境变量bool CreateChild(TCHAR* pText){const int BUFSIZE=256; TCHAR chNewEnv[BUFSIZE]; LPTSTR lpszCurrentVariable; DWORD dwFlags = 0; TCHAR szAppName[] = TEXT("child.exe")原创 2013-04-16 19:42:00 · 1174 阅读 · 0 评论 -
i++
面试题1:what will be the output of the following code?int i=3,j=4;i?i++:++j;printf("%d %d\n",i,j);A.3 3 B.4 4 C.3 4 D.4 3解析:i?i++:j++的意思是说如果问好前面的i是真,则进行i++,否则进行++j。由于i是3,所以是真,原创 2013-04-15 18:50:57 · 504 阅读 · 0 评论 -
一个可能存在Bug的二分查找方法的实现,大家一起看看有什么问题没
int BinarySearch(int array[],int key,int length) { int low=0; int high=length; int mid=0; while(low<high) { mid=low+(high-low)/2; if(key<array[mid]) { high=mid; } else if(key>arra原创 2013-04-23 18:27:32 · 681 阅读 · 0 评论 -
转载Hash表(C++实现)
http://blog.youkuaiyun.com/kay_sprint/article/details/6703450转载 2013-04-23 16:59:20 · 702 阅读 · 0 评论 -
查找算法,简单查找,二叉排序树,索引查找,哈希表
简单查找顺序查找:从线性表的一端开始,依次将每个记录的关键字与给定值进行比较,若某个记录的关键字等于给定值,表示查找成功,返回记录序号;若将线性表中所有记录都比较完,仍未找到关键字与给定值相等的记录,则表示查找失败,返回一个失败值。折半查找:又称为二分查找。这种查找方法要求查找表的数据是线性结构保存,并且还要求查找表中的数据是按关键字由小到大有序排列。它充分利用了元素间的次序关原创 2013-04-23 16:56:47 · 2276 阅读 · 0 评论 -
strcpy的实现,是否还有改进的地方?
char *_strcpy(char *strDestination,const char *strSource)//拷贝字符串{ if(strDestination==strSource) return strDestination; assert((strSource!=NULL)&&(strDestination!=NULL)); char *strTmp=strDestinat原创 2013-04-23 10:50:46 · 513 阅读 · 0 评论 -
一个自己实现的strstr 字符串查找函数,大家看看有什么错误和改进的地方
int _strstr(const char *_string,const char *_substring)//字串查找{ assert(_string!=NULL&&_substring!=NULL); if(_string==_substring) return 1; int strlen,sublen; strlen=sublen=0; while(_string[strl原创 2013-04-23 10:47:44 · 752 阅读 · 0 评论 -
一处容易忽略的内存泄露问题
在网络通信程序中定义一个函数用来接收数据,并将数据保存在一个WSABUF结构体中WSABUF结构体在msdn中定义如下:typedef struct _WSABUF {u_long len; //长度char FAR *buf; //数据缓存} WSABUF, FAR * LPWSABUF;在RecvMsg()中调用WSARecvFrom接收数据vo原创 2013-04-11 21:55:19 · 897 阅读 · 0 评论 -
强制类型转换
隐式强制类型转换一般发生在赋值表达式或是具有返回值的函数调用表达式中。(1)如果赋值表达式左右两侧操作数类型不同,操作符右边的变量会强制转换成左侧类型的变量然后进行赋值。(2)函数调用时,如果return语句返回值类型与函数的返回值类型不同,则return语句后面的表达式被强制转换成函数返回值类型然后再将值进行返回。显示强制类型转换C中的显示强制类型转换TYPE b=(TY原创 2013-04-11 19:42:05 · 887 阅读 · 0 评论 -
赋值语句1
What does the following program print?(中国台湾某著名计算机硬件公司2005年12月面试题)#include using namespace std;int main(){ int x=2,y,z; x*=(y=z=5); cout<<x<<endl; z=3; x==(y=z); cout<<x<<endl;原创 2013-04-15 16:47:22 · 718 阅读 · 0 评论 -
赋值语句2
What does the following program print?#include using namespace std;int Vac=3;int main(){int Vac=10;::Vac++;cout<<::Vac<<endl;cout<<Vac<<endl;return 0;}解析:::Va原创 2013-04-15 16:59:28 · 636 阅读 · 0 评论 -
内联函数和宏定义
内联函数的执行过程与带参数宏定义很相似,但参数的处理不同。带参数的宏定义并不对参数进行运算,而是直接进行字符串替换内联函数首先是函数,这就意味着函数的很多性质都适用于内联函数,即内联函数先把参数表达式进行运算求值,然后把表达式的值传递给形式参数。 内联函数与带参数宏定义的另一个区别是,内联函数的参数类型和返回值类型在声明中都有明确的指定;而带参数宏定义的参数没有类型的概念,只有在宏展转载 2013-04-15 21:14:00 · 663 阅读 · 0 评论 -
c++虚函数表
转自:http://blog.youkuaiyun.com/haoelC++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要转载 2013-04-18 21:26:54 · 432 阅读 · 0 评论 -
线程池原理和实现
通常我们使用多线程的方式是,需要时创建一个新的线程,在这个新的线程里执行特定的任务,然后在任务完成后退出。这在一般的应用里已经能够满足我们应用的需要,毕竟我们并不是什么时候都需要创建大量的线程,并在它们执行一个简单的任务后销毁。但是在一些web、email、database等应用里,比如彩铃,我们的应用在任何时候都要准备应对数目巨大的连接请求,同时,这些请求所要完成的任务却又可能非常的简单,即转载 2013-04-26 21:56:52 · 647 阅读 · 0 评论 -
C/C++中extern关键字详解
文章出自:http://www.cnblogs.com/yc_sunniwell/archive/2010/07/14/1777431.html1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。此外extern也可用来进行链接指定。也就是说extern有两个作用,第一个,当它与"C"一起连用时,如:转载 2013-04-17 10:09:33 · 418 阅读 · 0 评论 -
this指针
this指针是在实例化一个对象后产生的,并且指向对象本身。比如实例化一个对象pt,那么this=&pt;类的this指针有以下特点:(1)this只能在成员函数中使用全局函数,静态函数都不能使用this。实际上,成员函数默认第一个隐涵参数就是this,即T* const this。例如一个类class A{ public:int func(int p){}}原创 2013-04-16 19:14:59 · 570 阅读 · 0 评论 -
一个简单HashTable实现,哈希函数求模取余,链地址解决冲突
struct Node//定义节点结构 { Node* pNext; int val; Node(int n) { this->val=n; this->pNext=NULL; }};//定义一个hashtable类class HashTable{public: bool insert(int n);//插入一个数据 bool insert(int *pbegin原创 2013-04-25 14:48:07 · 1131 阅读 · 0 评论