
c/c++
逍遥子_
重点关注大并发处理、分布式计算、微服务、物联网、大数据等领域
展开
-
uthash官方使用说明文档
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"><!-- saved from url=(0063)http://troydhanson.github.io/uthash/userguide.html#_a_hash_in_c --><html xmlns="http://www.w3.org/1999/xhtml" xml:l.转载 2020-08-26 14:58:44 · 2020 阅读 · 0 评论 -
便利的开发工具-log4cpp快速使用指南
简介: log4cpp是个基于LGPL的开源项目,是基于优秀的日志处理跟踪项目Java语言的log4j移植过来的。log4j介绍的文档很多,在java领域使用的也比较广泛,而这个功能强大的库对国内的C++语言开发人员却使用的不多。这里从开发人员使用的角度介绍这个库,使开发人员用最少的代价尽快掌握这种技术。下面先简单介绍一下这个项目的优点(也是log4j的优点),然后分原理,手动使用步骤,配置文件驱转载 2012-10-23 17:49:08 · 1342 阅读 · 0 评论 -
linux下获取多个网卡MAC地址
#include #include #include #include #include #include #include #include #include #include #include #include #include u原创 2012-10-23 17:33:53 · 2653 阅读 · 0 评论 -
ubuntu下安装与使用Log4cpp
ubuntu下安装与使用Log4cpp1、下载版本:log4cpp-1.1rc3.tar.gz, 该版本中没有1.0版本的那些bug,不需修改,下载地址:http://sourceforge.net/projects/log4cpp/2、解压下载的压缩文件:log4cpp-1.1rc3.tar.gz,可以使用命令行,或者右键压缩包,在弹出菜单项中选择“解压至此处”3、解压原创 2012-11-01 10:14:45 · 5513 阅读 · 0 评论 -
ubuntu 下eclipse 启动时出现An error has occurred. See the log file的问题
eclipse原来可以使用的好好的,装了个CDT之后就不能启动类,经过查找,可能原因之一是机子装了多于一个jdk,并且当前使用的这个jdk与eclipse使用的冲突导致,问题分析及其解决办法:1、使用如下命令查看机子装了多少个jdk:update-alternatives --config java例如,输入上述命令之后,可以看到我的机子当前装了下面三个:有 2 个选项可用原创 2012-11-13 17:33:52 · 8024 阅读 · 1 评论 -
/etc/profile和/etc/environment的比较
先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。用户环境建立的过程中总是先执行/etc/profile然后在读取/etc/environment。为什么会有如上所叙的不同呢?转载 2012-11-14 09:27:56 · 897 阅读 · 0 评论 -
Linux下 JNI的使用
学习Android其中涉及对JNI的使用,对于这种跨语言的调用真没有见过,Java也都是最近才学的更别说对JNI的了解了,JNI的使用对于Android来说又是十分的重要和关键。那么到底Java到底是如何调用C/C++的,通过网络达人的总结中学习,自己也顺便总结一下这个学习的过程。什么是JNI JNI是Java native interface的简写,可以译作Java原转载 2012-11-13 11:02:29 · 1092 阅读 · 0 评论 -
Android JNI开发入门之一
JNI在Android系统中有着广泛的应用。Android系统底层都是C/C++实现的,上层提供的API都是 Java的,Java通过JNI调用底层的实现。比如:Android API多媒体接口MediaPlayer类,其实底层通过JNI调用libmedia库。由于JNI的存在可以让我们重用很多已经存在C/C++的库,省 去了重复开发的麻烦,并且可以利用很多开源的库(Android库中就有转载 2012-11-13 11:14:29 · 1008 阅读 · 0 评论 -
Android JNI开发入门之二
在上一篇文章《Android JNI开发入门之一》中,我介绍了Android应用程序(APK)怎样通过JNI调用Native C实现的共享库。本文将进一步介绍Android应用程序通过JNI调用NativeC++实现的共享库,并实现一个和上文《Android JNI开发入门之一》相同功能的Helloworld应用程序。两套不同的API 前文已经提到,Android系统的Java虚转载 2012-11-13 11:17:04 · 944 阅读 · 0 评论 -
MFC模态与非模态对话框的创建与销毁
1、模态对话框的创建(1)添加新的模块对话框资源,在ResourceView标签中右键项目选择“add resource...”,添加一个对话框资源,并修改其ID(主要为了方便后续操作),例如修改为IDD_DLG_TEST1。(2)为该新添加的窗口创建新类CDlgTest1(3)创建模态对话框:*定义一个CDlgTest1类的指针m_pDlgTest1.*为类m_pDlgTes原创 2012-12-29 09:29:42 · 1983 阅读 · 0 评论 -
使用fstream在C++工程中读取文件到二维数组
首先为类CCalculateCenterDlg定义一个较大的二维数组成员m_DataArry[100][100],实际读取数据中存放在该数组中,但是肯定用不完该数组的所有空间,实际使用的数组长度和宽度被保存在该类的成员变量m_iHeight 和 m_iWidth中。例如:其思路可如下描述定义了较大的二维数组10行9列,但是实际使用时可能只使用了6行3列,到时候引用时只要使用实际的行列数6和原创 2013-01-06 11:12:46 · 3707 阅读 · 4 评论 -
内存池总结
原文放在另一个博客地址:http://houjixin.blog.163.com/为什么要内存池?(1) 在调试阶段检查内存泄露。C++的指针给大家带来了很大的方便,但是它对内存的自由操作也带来了内存泄露等一系列问题,在一些嵌入式软件开发过程中(2) 减少内存碎片。频繁的从堆中new一些小内存容易造成内存碎片增加。原创 2012-05-23 19:11:43 · 2294 阅读 · 0 评论 -
VS2005、VS2010等VS系列IDE在MFC开发过程中,Resource View标签打不开,问题为“opened in other editor”
问题描述:VS2005、VS2010等VS系列IDE在MFC开发过程中,Resource View标签打不开,问题为“opened in other editor”可能原因:(1)resource.h文件被打开了,可能你打开的文件比较多,该文件就会被隐藏到后面的箭头中了,(2)在为新对话框添加类的时候,VS崩溃,再次打开就出现了这个问题,解决方法,分别对应:(1)打开关闭的原创 2012-12-10 16:09:35 · 2402 阅读 · 0 评论 -
MFC中将窗口最小化到系统托盘和还原
通过以下步骤可以在MFC程序中将窗口最小化到系统托盘,和还原成窗口,附加代码中如有特殊说明则会用红色标出。1、添加一个ICON图标,其ID为IDI_ICON_TESTICON,在VS2008坐标的Resource View(资源视图)中添加,该图标主要用于在托盘区显示;在头文件中定义添加托盘图标的消息号(用户所有对托盘的消息将对应此消息号):#define WM_ICON_原创 2012-12-28 14:26:27 · 2202 阅读 · 0 评论 -
STL源码之迭代器
1、迭代器是什么?为什么要引入迭代器? STL是将容器与算法分离开的,我们用到的类模板和函数模板即是用于实现这两个东西,其中类模板用于实现容器,函数模板用于实现算法,在使用的时候需要一个将两者联系起来的东西,这个东西就是迭代器。例如段代码1所示:算法find需要访问容器ivec中的每一个元素之后才能确定该容器中是否有目标元素10,在这里find需要使用了类型为vector::itera原创 2012-05-23 19:13:19 · 1223 阅读 · 0 评论 -
模板编译过程
首先说一下c++编译的过程:1. 预编译将文件中有#...的命令都进行展开,例如define MAX 100,就是建立起MAX与100间的对待关系,好在编译阶段进行堆的。而include就是就是把include的文件全部复制到当前文件中,如果当前文件是cpp文件,一个cpp文件就形成一个编译单元。这里有几点需要注意的地方:(1)如果一个h文件没有被任何cpp文件所inclu转载 2013-01-23 16:24:05 · 2753 阅读 · 1 评论 -
为什么C++编译器不能支持对模板的分离式编译
首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable Executable,即windows可执行文件)文件格式,并且本身包含的就已经是二进制码,但是不一定能够执行,因为转载 2013-01-23 16:20:18 · 1004 阅读 · 0 评论 -
模板的编译模式
1.函数模版的编译模式分两种:完全包含编译模式和局部编译模式(需要用export关键字)2.不同的编译器对这两种编译模式的支持各不相同,但一般都支持完全包含编译模式,具体支持情况需要参照具体使用的编译器文档模版函数和普通函数在使用的时候有一定的区别:(1)普通函数在使用的源文件中直接include该函数的声明即可(2)模版函数在使用的源文件中既要include模版函数的声明,也转载 2012-10-20 19:24:23 · 6662 阅读 · 0 评论 -
c++提取子串
下面的函数GetSub可以从源字符串srcStr中获取所有以begPtn开始且以endPtn结束的子串,并将所获取的子串保存到vector里,例如可以从字符串"sadfasdfsf#sdaf989789$#asdfasf894325445$#456123asdf$"中获取以“#”开头,以“$”结束的所有子串。#include #include #include using nam原创 2012-10-27 22:18:38 · 1965 阅读 · 1 评论 -
C++开源矩阵计算工具——Eigen的简单用法(一)
Eigen非常方便矩阵操作,当然它的功能不止如此,由于本人只用到了它的矩阵相关操作,所以这里只给出了它的一些矩阵相关的简单用法,以方便快速入门。矩阵操作在算法研究过程中,非常重要,例如在图像处理中二维高斯拟合求取光斑中心时使用Eigen提供的矩阵算法,差不多十来行代码即可实现,具体可见:http://blog.youkuaiyun.com/hjx_1000/article/details/8490653E原创 2013-01-11 10:01:26 · 33321 阅读 · 3 评论 -
C++开源矩阵计算工具——Eigen 在VS2005中的下载、配置与使用
1、 下载EigenEigen的官网下载地址:http://eigen.tuxfamily.org/index.php?title=Main_Page#Download下载后的文件名为:eigen-eigen-5097c01bcdc4.tar.bz2,为方便使用将其名字修改为eigen3,另外在优快云资源里也可以下载,其地址为:http://download.youkuaiyun.com/de原创 2013-01-07 16:22:56 · 33635 阅读 · 3 评论 -
C++开源矩阵计算工具——Eigen的简单用法(三)
本节主要涉及Eigen的块操作以及QR分解,Eigen的QR分解非常绕人,搞了很久才搞明白是怎么回事,最后是一个使用Eigen的矩阵操作完成二维高斯拟合求取光点的代码例子,关于二维高斯拟合求取光点的详细内容可参考:http://blog.youkuaiyun.com/hjx_1000/article/details/84906531、矩阵的块操作 1)矩阵的块操作有两种使用方法,其定义形原创 2013-01-11 17:52:49 · 17412 阅读 · 3 评论 -
二维高斯曲面拟合法求取光斑中心及算法的C++实现
(1)二维高斯去曲面拟合推导一个二维高斯方程可以写成如下形式:其中,G为高斯分布的幅值,,为x,y方向上的标准差,对式(1)两边取对数,并展开平方项,整理后为:假如参与拟合的数据点有N个,则将这个N个数据点写成矩阵的形式为:A = B C,其中:A为N*1的向量,其元素为:B为N*5的矩阵:C为一个由高斯参数组成的向量:原创 2013-01-10 17:16:04 · 21968 阅读 · 19 评论 -
Emacs常用命令
C- 当敲入字符时按住ctrl键M- 当敲入字符时按住alt或meta键C-p 向上移动一行 C-n 向下移动一行C-f 向前移动一个字符 C-b 向后移动一个字符M-f 向前移动一个字(word) M-b 向后移动一个字C-a 移动到行首 C-e 移动到行尾M-a 移动到当前句子所在的第一个字符M-e 移动到当前句子所在的最后一个字符C-v 向转载 2013-01-30 11:38:09 · 1022 阅读 · 0 评论 -
c++提取子串
下面的函数GetSub可以从源字符串srcStr中获取所有以begPtn开始且以endPtn结束的子串,并将所获取的子串保存到vector里,例如可以从字符串"sadfasdfsf#sdaf989789$#asdfasf894325445$#456123asdf$"中获取以“#”开头,以“$”结束的所有子串。#include #include #include using nam原创 2012-10-23 17:16:16 · 1688 阅读 · 0 评论 -
摄像头娘来了
被标题吸引进来的各位,抱歉,这还是一篇技术文章本文的主角是一个摄像头及其配套程序,我毫无创意地模仿网上的流行说法,称之为“摄像头娘”。她会自己发微博,记得follow她哦:t.qq.com/cameragirl前段时间浙大有个博士做了个“饮水机娘”,也就是他实验室里的饮水机没水或者水加热开了的时候,都会自动发一条微博。这个与“物联网”扯上了关系的东西,让我原来以为那位博士是改造了饮水机,加转载 2013-02-04 15:04:47 · 1703 阅读 · 0 评论 -
用GDB调试Segmentation Fault错误
调试Linux程序的时候,出现Segmentation Fault是最郁闷的事情了,程序代码量很大的时候,可能花很多时间都找不到出错原因。这里介绍一种对你调试Segmentation Fault很有帮助的方法,可能能迅速帮助你找到出错的代码行。这种方法需要用到Linux提供的core dump机制:当程序中出现内存操作错误时,会发生崩溃并产生核心文件(core文件)。使用G转载 2013-02-04 13:54:13 · 2218 阅读 · 0 评论 -
CreateThread、_beginthread与AfxBeginThread的区别及其注意事项
在windows下一般由以下三种方式来进行线程操作: 1、通过CreateThread(),对应线程结束函数ExitThread(); 2、通过_beginthread(),对应线程结束函_endthread(); 3、在MFC程序中还可以通过AfxBeginThread();对应线程结束函数AfxEndThread(),它们是MFC层面进行的原创 2013-02-20 09:43:43 · 2464 阅读 · 2 评论 -
小笔记,在windows和linux下分开编译、在C\C++下都使用C风格编译
写一个既能在windows下也能在linux平台下编译的的C/C++代码:#ifdef WIN32//windows部分的代码#else//linux部分的代码#endif //WIN32C/C++接口部分的常用实现代码(导出c接口):#ifdef __cplusplus extern "C"{#endi f//__cplusplus//此处的代码无论原创 2013-03-05 14:20:36 · 1566 阅读 · 0 评论 -
关键字Restrict
<!--@page {margin:2cm}p {margin-bottom:0.21cm}-->restrict是c99引入的,关键字restrict只用于限定指针;该关键字用于告知编译器,所有修改该指针所指向内容的操作全部都是基于(baseon)该指针的,即不存在其它进行修改操作的途径。也就是说它只是告诉编译器,这个指针所指向的内容,只有这个指针可以修改。但事实上也转载 2013-03-07 09:27:42 · 1396 阅读 · 0 评论 -
浅谈时间函数gettimeofday的成本
我们在程序中会频繁地取当前时间,例如处理一个http请求时,两次调用gettimeofday取差值计算出处理该请求消耗了多少秒。这样的调用无处不在,所以我们有必要详细了解下,gettimeofday这个函数做了些什么?内核1ms一次的时钟中断处理真的可以支持tv_usec字段达到微秒精度吗?它的调用成本在i386/x86_64体系架构上代价一样吗?如果在系统繁忙时,频繁的调用它有问题吗?get转载 2013-03-07 10:05:26 · 1673 阅读 · 0 评论 -
<string>与<string.h>的区别
在C++开发过程中经常会遇到两个比较容易混淆的头文件引用#include 和 #include,两者的主要区别如下:#include.h>是C语言的标准库,主要是对字符串进行操作的库函数,是基于char*进行操作的,例如常见的字符串操作函数stpcpy、strcat都是在该头文件里面声明的。#include是C++语言的标准库,该库里面定义了string类,你可以包含这个头文件,然后定义一原创 2013-03-08 08:38:23 · 2553 阅读 · 2 评论 -
C语言标准库中常见字符串处理函数
void *memccpy (void *dest, const void *src, int c, size_t n);从src所指向的对象复制n个字符到dest所指向的对象中。如果复制过程中遇到了字符c则停止复制,返回指针指向dest中字符c的下一个位置;否则返回NULL。void *memcpy (void *dest, const void *src, size_t n);从s转载 2013-03-11 14:21:34 · 2438 阅读 · 0 评论 -
C文件操作函数fscanf和fprintf的使用
使用fscanf和fprintf主要对一些有特定格式的数据进行文件读写较为方便,需要注意的是在读取的时候fscanf会遇到空格、回车就停止读取。 使用fprintf向文件中写入格式为的内容,其实例代码如下:bool Write_Msg(TMsg& msg){ if(NULL == g_pFile) { printf("NULL == g_pF原创 2013-02-23 11:31:11 · 2474 阅读 · 0 评论 -
选择排序
bool CHandleData::SortData(int* pData, int iLen){ if (NULL == pData || iLen <=0) return false; int iCurPos = 0, iSearchStart = 0 , iSelectedPos = 0; for(iCurPos=0; iCurPos<iLen; ++iCurPos) {原创 2013-03-12 15:17:49 · 883 阅读 · 0 评论 -
C字符串替换函数
下面的函数改写自某个前辈所写的函数:/***************************************************************************** 函数名:_ReplaceStr* 作者: * 日期: * 输入参数:char* sSrc 原字符串* char* sMatchStr 特征字符串*原创 2013-03-14 10:05:28 · 2127 阅读 · 0 评论 -
C++字符串操作总结
C++标准库中提供了一系列的模板类用来对字符串流的输入、输出和输入\输出操作,这些操作都是基于C++的string类,即它们都是输入、输出到一个string对象,当然它们也都提供了对应的宽字符集操作的版本。在C++开发过程中通常使用sstream对字符串进行操作,这里还存在sstream的一个兄弟版本strstream,它也可以提供类似功能的字符串操作。区别:sstream与strst原创 2013-03-29 11:31:47 · 1564 阅读 · 0 评论 -
c++ 应用socket实现C/S端文件的传输
人从生到死的生活生计每一步都应是一种隔着柜台的现钱生意关系,若是我们不是如许登天堂的话,那么天堂也就不是为经济学所安排的处所,那儿也就没有我们的事了。起首是办事器端,大致说下贱程:办事器创建线程去向理惩罚应答accept(),当接管到客户端连接恳求时,起首获取要发送的指定的文件数据总大小给客户端,接着就是轮回读取要发送的文件数据流向客户端发送文件数据,每次都断定轮回读取到的数据实际大小,当实际读取转载 2013-03-15 15:59:36 · 2500 阅读 · 0 评论 -
C++Socket编程总结
使用socket写代码主要是要看自己的需求是什么。如果通信时,内容很重要就要使TCP方式。如果用户数太多,可能就要使用UDP方式了。在TCP模式下,最简单的方式就是这样的,使阻塞方式:服务端:1.初始化socket环境,创建socket2.梆定一个端口3.开始监听4.接收客户端5.接收到客户端之后,使用这个socket来与这个客户通信#include "转载 2013-03-15 14:47:08 · 1470 阅读 · 0 评论 -
C/C++中指针和引用之相关问题研究
一、基本知识指针和引用的声明方式:声明指针: char* pc;声明引用: char c = 'A' char& rc = c;它们的区别:①从现象上看,指针在运行时可以改变其所指向的值,而引用一旦和某个对象绑定后就不再改变。这句话可以理解为:指针可以被重新赋值以指向另一个不同的对象。但是引用则总是指向在初始化时被指定的对象,以后不能改转载 2013-03-15 17:52:37 · 1085 阅读 · 0 评论