C/C++
文章平均质量分 83
Sunshine_top
安安静静、认认真真完成自己的事情
展开
-
信息融合的杂贴
Makefile: http://wiki.ubuntu.org.cn/index.php?title=跟我一起写Makefile:概述&variant=zh-cng++参数介绍:http://www.cnblogs.com/lidan/archive/2011/05/25/2239517.html -lm 参数表示“链接数学库”,在自己编写的获取天气信息的C程序“原创 2014-10-24 08:51:53 · 1470 阅读 · 0 评论 -
构造函数以及复制控制操作的调用时机
复制构造函数可用于:1)根据一个同类类型对象显示或隐式初始化一个对象;2)复制一个对象,将其作为实参传递给一个函数;3)从函数返回时复制一个对象;4)初始化顺序容器中的元素;5)根据元素初始化列表初始化数组元素。class A { int data;public: A() { cout << "\tA()" << endl; } A(const A &原创 2015-06-26 10:54:53 · 1469 阅读 · 0 评论 -
sizeof计算类的大小
类的大小——sizeof 的研究(1)C++ 虚函数表解析原创 2015-01-16 19:19:15 · 4397 阅读 · 0 评论 -
GCC下itoa函数的演变:itoa with GCC
简介我怎么在GCC下使用itoa()? 啊,C/C++!itoa()不是ANSI C标准而且它不能在linux下的GCC中工作(至少我使用的版本是这样的)。这是很让人沮丧的,特别是当你想让代码跨平台可用时(Windows/Linux/Solaris或其他任何机器)。 很多人说可以使用sprintf来写字符串但是sprintf不满足itoa()的一翻译 2015-06-15 09:00:44 · 4604 阅读 · 1 评论 -
对itoa函数的分析
在文章GCC下itoa函数的演变:itoa with GCC中提到了几种itoa函数的写法,其中我觉得下面这个是最容易理解的方法:/** * Ansi C "itoa" based on Kernighan & Ritchie's "Ansi C": */void strreverse(char* begin, char* end) { char aux; while(end>beg原创 2015-06-15 15:23:39 · 1431 阅读 · 0 评论 -
C++多态
多态意思是”多种形态“。多态性是面向对象编程的关键思想。 在C++中多态性仅用于通过继承而相关联的类型的引用或指针,多态通过虚函数实现。当声明基类的指针,利用该指针指向任意子类对象,调用相应的虚函数,可以根据指向的子类不同而实现不同的方法。通过基类指针或引用调用虚函数时,发生动态绑定。引用或指针既可以指向基类对象也可以指向派生类对象,这一事实是动态绑定的关键。用引用或指针调用的虚原创 2014-12-09 16:30:52 · 1234 阅读 · 0 评论 -
指针的种种
1. 直接为一个指针赋值是错误的 (能通过编译,但是会出现段错误): int *p; *p = 5; 指针变量必须初始化后才能使用。原创 2014-10-28 11:24:56 · 4156 阅读 · 0 评论 -
C++智能指针及其在C++11标准中的演变
本文依次对以下几个内容进行介绍:一、原创 2014-10-24 19:53:59 · 1489 阅读 · 0 评论 -
C++对象模型:第2章(1)-构造函数
一、默认构造函数以下两个观点是错误的:(1)任何类,如果没有定义默认构造函数,编译器就会自动合成一个(但是作者Stanley B. Lippman在Primer中说“任何类没有显式定义构造函数就会默认生成一个”,这两种说法有点冲突)。(2)编译器合成的默认构造函数会显式将类的每个成员设定为默认值。 有四种情况,会造成编译器必须为未声明构造函数的类合成一个默认构原创 2015-06-05 17:06:51 · 1022 阅读 · 0 评论 -
typedef和#define
在C语言中,关键字typedef用来为现有数据类型创建一个别名,而不是用来创建一个新的数据类型。typedef的用法简单的例子#include typedef int type_int;int main(void){ type_int a = 0x10203040; short b = a; printf("a = 0x%x, b = 0x%x\n", a原创 2015-05-22 09:48:50 · 1111 阅读 · 0 评论 -
整数的二进制表示中1的个数
给出通常能想到的方式,这两种方式在《C和指针》一书中给出。以下讨论的均为非负整数。/*该方法每次在循环中判断数的二进制最右一位是否为1(如果该数能不能被2整除)。每次循环后该数右移一位。因此遍历了数的二进制表示的每一位。*/int count_one_bits1(int value) { int count; for (count = 0; value != 0; value原创 2015-01-11 21:38:43 · 4703 阅读 · 0 评论 -
Gzip压缩数据解压
在进行微博数据解析的过程中,遇到了gzip格式的压缩数据,要从这些数据中得到微博信息就首先需要对gzip数据进行解压。这里采用的解压工具是zlib(http://www.zlib.net/),关于zlib的技术细节参考http://www.zlib.net/zlib_tech.html。重组后的微博TCP会话中的压缩数据:从上图可以看出,gzip数据的开始是从两个换行“\r原创 2016-03-02 11:23:18 · 7472 阅读 · 1 评论 -
正则表达式
http://www.jb51.net/tools/zhengze.html#resources目录跳过目录本文目标如何使用本教程正则表达式到底是什么东西?入门测试正则表达式元字符字符转义重复字符类分枝条件反义分组后向引用零宽断言负向零宽断言注释贪婪与懒惰处理选项平衡组/递归匹配还有些什么东西没提到联系作者网上的资源及本文参考文献更新纪录本文目标30分钟内让你明白正则表转载 2015-01-10 19:53:44 · 2947 阅读 · 0 评论 -
编译并使用Boost 1.57
boost库编译1.首先在http://www.boost.org/下载源代码。2.解压源代码到磁盘(如E:\project_VS\boost_1_57_0)。3.生成bjam.exe可执行文件: 用VS2010的命令行来实现,后期也是使用VS20原创 2015-01-08 21:53:34 · 4394 阅读 · 0 评论 -
extern ”C"的使用
本文分析extern “C”的使用方法;介绍C++和C文件相互调用的方式。extern "C" extern "C" 包含双重含义,从字面上即可得到:首先,被它修饰的目标是“extern”的;其次,被它修饰的目标是“C”的。被extern "C"限定的函数或变量是extern类型的。 extern是C/C++语言中表明函数和全局变量作用范围(可见性)原创 2015-01-15 11:10:08 · 7102 阅读 · 2 评论 -
C++定义不能被继承的类
在C++中,子类的构造函数会自动调用父类的构造函数子类的析构函数也会自动调用父类的析构函数。方法一:要想一个类不能被继承,最简单的方式:把它的构造函数和析构函数都定义为私有函数。那么当一个类试图从它那继承的时候,必然会由于试图调用构造函数、析构函数而导例致编译错误。但是这样的话,通过private的构造函数与析构函数无法得到该类的实例。方法二:可以通过定义公有的原创 2015-07-15 16:51:51 · 2773 阅读 · 0 评论 -
C++对象模型:多重继承和虚继承的内存布局
这是一篇译文,原文地址:这里; 翻译的文章转自:点击打开链接 这篇文章主要讲解虚继承的C++对象内存分布问题,从中也引出了dynamic_cast和static_cast本质区别、虚函数表的格式等一些大部分C++程序员都似是而非的概念。原文见这里(By Edsko de Vries, January 2006) 敬告: 本文是介绍C++的技术文章,假定读者对翻译 2015-06-06 19:11:18 · 2264 阅读 · 0 评论 -
Linux C编程(含C陷阱与缺陷笔记)
1、warning: incompatible implicit declaration of built-in function 'memset' 缺少头文件:加入#include2、结构体的动态内存分配: 结构体:struct [小标签名称]{成员声明列表};注意的几点: 1)不能在成员声明列表里初始化赋值。 2)如果声明一个结构体变量,如s原创 2014-10-24 08:40:30 · 4161 阅读 · 0 评论 -
二进制位的翻转和二进制表示中1的个数
转自:http://blog.chinaunix.net/uid-20760757-id-1872389.htmlunsigned char reverse8( unsigned char c ){ c = ( c & 0x55 ) > 1; c = ( c & 0x33 ) > 2; c = ( c & 0x0F ) > 4; retu原创 2015-05-04 21:03:36 · 6158 阅读 · 0 评论 -
C++对象模型:第1章-C++对象模型
与此文相关的文章:多重继承和虚继承的内存布局C++对象模型C++ 虚函数表解析C++在布局以及存取时间上主要的额外负担是由virtual引起的,包括:(1)虚函数机制;(2)虚基类C++类对象这篇文章不错,本文几个图来自这里:http://www.cnblogs.com/skynet/p/3343726.html 在c语原创 2015-06-08 10:40:44 · 1215 阅读 · 0 评论 -
位操作实现加减乘除四则运算
常见的位操作实现1. 常用的一个等式:-n = ~(n - 1) = ~n + 12. 获取整数的二进制的最右边的1:n & (-n) 或 n & ~(n - 1)。例如 n = 010100, -n = 101100,那么n & (-n) = 0001003. 去除整数的二进制的最右边的1:n & (n - 1)。例如 n = 010100,n-1 = 010011,n&(n-1)原创 2015-01-13 18:48:27 · 6191 阅读 · 0 评论 -
位移操作的另类情况
在32位机器上进行左移操作,int型数a = 1左移32位的结果是什么?在vs2010,以及gcc下编译运行结果均为1,有类似下面的警告。为什么左移32位其值不变?警告:1>------ 已启动生成: 项目: test_C++, 配置: Debug Win32 ------1> test.cpp1>test.cpp(10): warning C4293: “>>”: Shift原创 2015-03-26 09:48:49 · 2467 阅读 · 0 评论 -
STL的几个版本简要介绍
STL(Standard Template Library,标准模板库)。STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其他一些组件的集合。这里的“容器”和算法的集合指的是世界上很多聪明人很多年的杰作。STL的目的是标准化组件,这样就不用重新开发,可以使用现成的组件。STL现在是C++的一部分,因此不用额外安装什么。 在C++标原创 2015-01-05 21:04:38 · 4691 阅读 · 0 评论 -
Xapian在Ubuntu下的安装和测试
安装过程下载源文件Xapian官网:Xapiandownload page解压tar xf xapian-core-.tar.xztar xf xapian-omega-.tar.xztar xf xapian-bindings-.tar.xz配置并创建Xapian库cd xapian-core-./configuremakesudo make i原创 2015-01-20 17:00:47 · 3506 阅读 · 0 评论 -
不用”if“,”?:“,”switch“或其他判断语句,求两个数中较大的数或较小的数
以下五种方法分别求出较大的数和较小的数的方法。较小数的代码在注释中,但未运行测试。int Find1(int a, int b) { return ((a + b) + abs(a - b)) / 2; //return ((a + b) - abs(a - b)) / 2;}/*当a大于b时,a-b为正,右移sizeof(int) * 8 - 1后,最右侧一位为0,0^1 = 0原创 2015-01-13 21:25:11 · 8073 阅读 · 1 评论 -
《程序员面试宝典》 (x&y) + ( (x^y)>>1 )
《程序员面试宝典》第四版39页的题:int f(int x, int y) { return (x & y) + ((x ^ y) >> 1);}//求f(334 + 995)的值认为作者的思路不太理解的。下面给出我的思路:对于数的二进制&、^运算,某位的运算无非就是三种情况:(1)1与1运算;(2)1与0运算;(3)0与0运算。1与0运算 1&0结果为0原创 2015-01-13 09:22:43 · 3223 阅读 · 0 评论 -
讨论printf和cout的参数调用顺序
这里纠正在网络上看到的几个错误,以下给出正确的观点:(1)printf和cout都是有缓冲机制的。(有人认为printf是没有缓冲区的)(2)printf和cout函数对参数的调用顺序在c/c++中是未定义的。(有人认为它们读入的顺序是由右向左,输出顺序是由左到右,类似于栈)基于以上错误的认识,看下列程序,有人会得到错误的输出的结果。#include #include原创 2015-01-12 21:13:21 · 3869 阅读 · 0 评论 -
ubuntu乱码
我的问题: 从网站获取的新闻直接存在文本(.txt)中会出现乱码。解决方式: 解决txt文档乱码 1. 打开终端,在其中输入命令: gconf-editor 并回车。 2. 在新开的窗口里,在左边依次展开“apps”、“gedit-2”、“preferences”、“encodings”。 3. 在右边的窗口里,双击“auto_detected”。 4.转载 2014-10-24 08:40:56 · 1236 阅读 · 0 评论 -
C字符串处理
1. strsep函数要注意的问题:http://snprintf.blog.51cto.com/3676303/6957601) 被分割字串要被改变,所以不能操作存放在静态存储区的字串常量。2) 分割符要被替换成’\0’。3) 需要传二级指针,因为s1是指向分割字串,第一次指向源字串,调用后指向分割后的下一个token。所以s1原创 2014-10-24 08:42:00 · 4327 阅读 · 0 评论 -
一定要弄懂GetMemory
堆栈栈中分配局部变量空间,是系统自动分配空间。定义一个 char a;系统会自动在栈上为其开辟空间。由于栈上的空间是自动分配自动回收的,所以栈上的数据的生存周期只是在函数的运行原创 2015-01-16 21:30:46 · 3601 阅读 · 0 评论 -
new与malloc的区别和联系
两者的相同之处 1、它们都可以申请动态内存和释放内存。C++中申请动态内存和释放内存用new/delete或者malloc/free都可以,而且它们的存储方式相同。 2、new与malloc动态申请的内存都位于堆中,无法被操作系统自动收回,要有相应的delete或者free来释放空间;对于内置数据类型,如int、char型,其效果是一样的。两者的区别原创 2015-03-22 16:00:25 · 6572 阅读 · 0 评论 -
泛型编程注意不能将模板类的成员函数放在独立的实现文件中
泛型编程中,编写的类和函数可以多态地用于跨越编译时不相关的类型。一个类或函数可以用来操纵多种类型的对象。标准库中的容器、迭代器和算法都是很好地泛型编程的实例。在C++中,模板是泛型编程的基础。模板是创建类或者函数的蓝图或公式。需要注意的是普通函数、类与模板函数、类的区别: 当编译器看到模板定义时,不立即产生代码。只有用到模板时,如调用了函数模板或调用了类模板对象的时候,编译器原创 2014-12-19 17:32:27 · 4769 阅读 · 0 评论 -
C语言volatile关键字
在学习setjmp和longjmp函数时涉及到了volatile关键字。volatile关键字是什么作用?为什么要设置该关键字?转自: http://blog.csdn.net/tigerjibo/article/details/7427366一.前言1.编译器优化介绍: 硬件级别优化:由于内存访问速度远不及CPU处理速度,为提高机器整原创 2015-05-22 16:58:57 · 1275 阅读 · 0 评论 -
c和指针
第一章 快速上手Q6:C语言为什么不进行下标检查。 1,不检查下标是否越界可以有效提高程序运行的效率,因为如果你检查,那么编译器必须在生成的目标代码中加入额外的代码用于程序运行时检测下标是否越界,这就会导致程序的运行速度下降,所以为了程序的运行效率,C/C++才不检查下标是否越界。 2,不检查下标是为了给程序员更大的空间,也为指针操作带来更多的方便。如果有这个检查的话指针的功原创 2014-10-23 09:51:09 · 1415 阅读 · 0 评论 -
do{...}while(0)的意义和用法
libnids中的两个宏如下是libnids中定义的两个宏,这两个宏都包含了多个语句,看起来很复杂的样子。这两个宏定义其实是有潜藏的问题的,具体看本文第二部分中的“辅助定义复杂的宏,避免引用的时候出错”。#define START_CAP_QUEUE_PROCESS_THREAD() \ if(nids_params.multiproc) { /* threading... */ \原创 2015-05-21 21:39:34 · 1293 阅读 · 0 评论 -
C++非const的引用不能指向临时对象
http://blog.csdn.net/jiafu1115/article/details/8865964原创 2014-10-23 19:29:22 · 2916 阅读 · 0 评论 -
string的size/length、resize/reverse和capacity
函数原型reserve原型: #include void reserve( size_type size = 0 );函数reserve()将字符串的容量设置为至少size.如果size指定的数值要小于当前字符串中的字符数(亦即size ), 容量将被设置为可以恰好容纳字符的数值. reserve()以线性时间(linear time)运行.原创 2015-05-02 09:38:59 · 2573 阅读 · 0 评论 -
求一元方程的根(牛顿迭代法)
牛顿迭代公式:那么根据该公式可以按以下步骤求解一元方程的任意次的根(1) 选一个方程的近似根,赋给变量Xn;(2) 将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;(3) 当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。以下均原创 2015-04-27 09:05:29 · 6139 阅读 · 0 评论 -
cout格式化输出
转自:http://www.cnblogs.com/walfud/articles/2047096.html将 cout 的 flag 保存到变量, 以便修改后的恢复 ostream::fmtflags old = cout.flag() ; // 无参将返回当前 flag 值 cout.flag(old) ;原创 2015-04-26 20:10:52 · 1260 阅读 · 0 评论 -
多模式匹配算法:AC算法、WM算法
一、AC(Aho—Corasiek)算法snort中实现了基于NFA状态和基于DFA状态的AC算法。这两个算法的代码实现参考本文末源代码:acsmx.cpp二、WM(Wu-Manber)算法该算法的实现参考源代码:WuManber_core.cpp, WuManber.cpp算法实现及对微博数据解析的测试源码 下载:http://download.csdn.原创 2016-03-03 21:33:29 · 7019 阅读 · 1 评论