C/C++
枫★曦
Stay simple,stay positive...
展开
-
OpenCV3.1.0+VS2015开发环境配置
摘要: 由于最近AR(增强现实)这个概念非常火爆,各种基于AR的应用及游戏逐渐面向大众,而在AR中最重要的两个技术就是跟踪识别和增强渲染,其中跟踪识别是通过OpenCV这个开源的计算机视觉库来实现的,所以我就想着研究一下这个库,这里是个人的学习笔记,不是什么权威的教程,如果你们有错误也麻烦帮我指出哈。==========================================...转载 2018-05-31 21:41:12 · 454 阅读 · 0 评论 -
字符串函数strstr
<br /> 原型:extern char *strstr(char *haystack, char *needle);<br /> 用法:#include <string.h><br /> 功能:从字符串haystack中寻找needle第一次出现的位置(不比较结束符NULL)。<br /> 说明:返回指向第一次出现needle位置的指针,如果没找到则返回NULL。<br /> 举例:<br /> // strstr.c<br /><br /> #include <syslib.h><br />原创 2010-06-04 16:46:00 · 965 阅读 · 0 评论 -
字符串函数strtok
<br />原型:extern char *strtok(char *s, char *delim);<br />用法:#include <string.h><br />功能:分解字符串为一组标记串。s为要分解的字符串,delim为分隔符字符串。<br />说明:首次调用时,s必须指向要分解的字符串,随后调用要把s设成NULL。<br /> strtok在s中查找包含在delim中的字符并用NULL('''')来替换,直到找遍整个字符串。<br /> 返回指向下一个标记串。当没有标记串时则返原创 2010-06-04 16:45:00 · 377 阅读 · 0 评论 -
memmove函数的实现
<br />下面是memmove函数的实现代码:<br /> <br />void memmove(void *dest, void const *src, size_t n)<br />{<br /> register char *dp = (char*)dest;<br /> register char *sp = (char*)dest;<br /> if (dp == sp)<br /> {<br /> return;<br原创 2010-07-02 22:10:00 · 598 阅读 · 0 评论 -
字节对齐详解
一.什么是字节对齐,为什么要对齐? 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定类型变量的时候经常在特 定的内存地址访问,这就需要各种类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只转载 2010-05-07 20:03:00 · 508 阅读 · 0 评论 -
C/C++时间函数
clock()返回clock_t类型;在time.h头文件中,定义了 typedef long clock_tclock()是用来计算两个时间点之间的时间间隔。如下程序:#include int main(){ int i = 0; clock_t start_time, end_time; start_time = clock(); //开始计时, start_time = 0 whi原创 2010-05-07 19:54:00 · 496 阅读 · 0 评论 -
C++ string详解
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。好了,进入正题………首先,为了在我们的程序中使用st转载 2010-05-07 19:50:00 · 519 阅读 · 0 评论 -
C++中四种类型转换运算符的使用方法
<br />C++的四个类型转换运算符已经有很久了,但一直没有弄清楚它们的用法,今天看到一本书上的解释,才大致地的了解了其具体的用法.<br /><br />具体归纳如下:<br /><br />reinterpret_cast<br />该函数将一个类型的指针转换为另一个类型的指针.<br />这种转换不用修改指针变量值存放格式(不改变指针变量值),只需在编译时重新解释指针的类型就可做到.<br />reinterpret_cast 可以将指针值转换为一个整型数,但不能用于非指针类型的转换.<br />例转载 2010-07-01 22:46:00 · 429 阅读 · 0 评论 -
C指针的实质
<br />最近对C/C++指针特别感冒,就详细的研究了下<br /> 看下面的定义:<br /> char a[] = "Hello World";<br /> char *p = "Hello World";<br /> 1.什么是地址 <br /> 地址本身就是一种基本数据类型,它跟整数,浮点数,字符等基本类型是一样的。指针不是类型,真正的类型是地址,指针只不过是存储地址这种数据类型的变量。<br /> 打个比方,对于<br /> int i=10;<br /> 10是整数,而i是存转载 2010-07-01 22:42:00 · 469 阅读 · 0 评论 -
将不满_numBits位的字符串用0补全
<br />以下是C实现的代码:<br /> <br /><br />void FillStrWithZero(char* _strIn, char* _strOut, int _numBits) <br />{<br /> if (_numBits <= strlen(_strIn))<br /> {<br /> return;<br /> }<br /> if (strlen(_strIn) < _numBits)<br />原创 2010-06-28 20:25:00 · 908 阅读 · 0 评论 -
从字符串转数字
<br />以下是字符串转换为数字的C代码:<br />unsigned __int64 StrToNum(char* _strIn)<br />{ <br /> int loop = 0;<br /> int base = 0; //代表进制<br /> unsigned __int64 _retNum = 0; <br /> bool isHEX = false;<br /> char *temp原创 2010-06-28 20:24:00 · 619 阅读 · 0 评论 -
笔试题:删除字符串的空格并返回空格数目
<br />以下是C的实现代码:<br /><br />long DelStrSpace(char* _strIn, char* _strOut) //delete the space of string<br />{<br /> long _spaceNumber = 0;<br /> char* p = _strIn;<br /> char* q = p + 1; //1234 5 6 7 8原创 2010-06-28 20:16:00 · 857 阅读 · 0 评论 -
指针和引用的区别
一、C++中引用和指针的区别指针初始化的时候,可以指向一个地址,也可以为空。引用必须初始化为另一个变量. int ival = 1024; int *pi = &ival; // a pointer int &rval = ival; // a reference二、估计很多人在编写C++程序都或多或少的会用到pointer 和 reference这两种东西,但是他们两者到底有什么样转载 2010-05-01 09:42:00 · 430 阅读 · 0 评论 -
C++运算符重载函数基础及其值返回状态
运算符重载是C++的重要组成部分,它可以让程序更加的简单易懂,简单的运算符使用可以使复杂函数的理解更直观。 对于普通对象来说我们很自然的会频繁使用算数运算符让他们参与计算,但是对于自定义类的对象来说,我们是无论如何也不能阻止写出像下面的代码一样的程序来的。 例子如下:class Test { //过程省略 } int main() { Test a,c转载 2010-05-01 09:36:00 · 539 阅读 · 0 评论 -
C++地底层机制
c++为我们所提供的各种存取控制仅仅是在编译阶段给我们的限制,也就是说是编译器确保了你在完成任务之前的正确行为,如果你的行为不正确,那么你休想构造出任何可执行程序来。但如果真正到了产生可执行代码阶段,无论是c,c++,还是pascal,大家都一样,你认为c和c++编译器产生的机器代码会有所不同吗,你认为c++产生的机器代码会有访问限制吗?那么你错了。什么const,private,统统没有(con转载 2010-05-03 09:43:00 · 511 阅读 · 0 评论 -
C++中的四种类型强制转换
显式类型转换又被称之为 强制类型转换。C 风格: (type-id)C++风格: static_cast、dynamic_cast、reinterpret_cast、和const_castC风格的强制类型转换是最好不要用的,最好是使用标准的C++风格的转换符。static_cast用法:static_cast ( expression )说明:该运算符把expression转换为type原创 2010-05-01 09:38:00 · 767 阅读 · 0 评论 -
获取字符串中特殊字符的个数
<br />以下是C代码:<br /> <br />long GetSpecialCharNum(const char* _strIn, char ch)<br />{<br /> long _retNum = 0;<br /> <br /> while (*_strIn)<br /> {<br /> if (*_strIn == ch)<br /> {<br /> _retNum原创 2010-06-28 20:26:00 · 915 阅读 · 0 评论 -
浅析C++标准头文件结构
<br />在C语言中,并没有任何内在的机制来完成如下一些功能:在编译时包含其他源文件、定义宏、根据条件决定编译时是否包含某些代码。要完成这些工作,就需要使用预处理程序。尽管在目前绝大多数编译器都包含了预处理程序,但通常认为它们是独立于编译器的。预处理过程读入源代码,检查包含预处理指令的语句和宏定义,并对源代码进行响应的转换。预处理过程还会删除程序中的注释和多余的空白字符。<br /> 预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存转载 2010-06-04 16:42:00 · 585 阅读 · 0 评论 -
内存拷贝函数的实现
<br /><br />以下是对内存拷贝函数的实现:<br /> <br />void *memcpy(void *dest, const void *src, size_t n) <br />{<br /> assert(dest != NULL && src != NULL);<br /> if(dest == src)<br /> return dest;<br /> else if(dest < src)<br /> { <br /> const byte *c_src = (const原创 2010-06-21 09:44:00 · 1333 阅读 · 0 评论 -
C++编程对缓冲区的理解
<br />什么是缓冲区<br /> 缓冲区又称为缓存,它是内存空间的一部分。也就是说,在内存空间中预留了一定的存储空间,这些存储空间用来缓冲输入或输出的数据,这部分预留的空间就叫做缓冲区。<br /> 缓冲区根据其对应的是输入设备还是输出设备,分为输入缓冲区和输出缓冲区。<br /> 为什么要引入缓冲区<br /> 我们为什么要引入缓冲区呢?<br /> 比如我们从磁盘里取信息,我们先把读出的数据放在缓冲区,计算机再直接从缓冲区中取数据,等缓冲区的数据取完后再去磁盘中读取,这样就可以减少磁盘的读转载 2010-08-14 14:16:00 · 526 阅读 · 0 评论 -
CMake入门指南
CMake是一个比make更高级的编译配置工具,它可以根据不同平台、不同的编译器,生成相应的Makefile或者vcproj项目。通过编写CMakeLists.txt,可以控制生成的Makefile,从而控制编译过程。CMake自动生成的Makefile不仅可以通过make命令构建项目生成目标文件,还支持安装(make install)、测试安装的程序是否能正确执行(make test,或者cte...转载 2018-04-28 21:04:33 · 386 阅读 · 0 评论 -
STL六大组件之——分配器(内存分配,好深奥的东西)
SGI设计了双层级配置器,第一级配置器直接使用malloc()和free(),第二级配置器则视情况采用不同的策略:当配置区块超过128bytes时,视之为“足够大”,便调用第一级配置器;当配置区小于128bytes时,视之为“过小”,为了降低额外负担,便采用复杂的memory pool 整理方式,而不再求助于第一级配置器。整个设计究竟只开放第一级配置器,取决于_USE_MALLOC是否被定义:转载 2014-12-20 21:02:30 · 10368 阅读 · 0 评论 -
使用 random_shuffle() 算法随机化序列元素
假设你需要指定范围内的随机数,传统的方法是使用ANSI C的函数random(),然后格式化结果以便结果是落在指定的范围内。但是,使用这个方法至少有两个缺点。首先,做格式化时,结果常常是扭曲的,所以得不到正确的随机数(如某些数的出现频率要高于其它数)其次,random()只支持整型数;不能用它来产生随机字符,浮点数,字符串或数据库中的记录。对于以上的两个问题,C++中提供了更好的解决方转载 2013-02-05 14:32:10 · 2742 阅读 · 0 评论 -
C++11 标准新特性:Defaulted 和 Deleted 函数
Defaulted 函数背景问题C++ 的类有四类特殊成员函数,它们分别是:默认构造函数、析构函数、拷贝构造函数以及拷贝赋值运算符。这些类的特殊成员函数负责创建、初始化、销毁,或者拷贝类的对象。如果程序员没有显式地为一个类定义某个特殊成员函数,而又需要用到该特殊成员函数时,则编译器会隐式的为这个类生成一个默认的特殊成员函数。例如:清单 1 cl转载 2013-01-06 09:47:15 · 675 阅读 · 0 评论 -
一个跨平台的 C++ 内存泄漏检测器
基本使用对于下面这样的一个简单程序test.cpp:int main(){ int* p1 = new int; char* p2 = new char[10]; return 0;}我们的基本需求当然是对于该程序报告存在两处内存泄漏。要做到这点的话,非常简单,只要把debug_new.cpp也编译、链接进去就可以了。在Linux转载 2012-06-07 13:25:42 · 2728 阅读 · 0 评论 -
用 Eclipse 平台进行 C/C++ 开发
C 和 C++ 语言都是世界上最流行且使用最普遍的编程语言, 因此 Eclipse 平台(Eclipse Platform)提供对 C/C++ 开发的支持一点都不足为奇。 因为 Eclipse 平台只是用于开发者工具的一个框架,它不直接支持 C/C++;它使用外部插件来提供支持。 本文将向您演示如何使用 CDT — 用于 C/C++ 开发的一组插件。CDT 项目(有关链接, 请参阅本文后面的 参考转载 2012-06-07 13:22:06 · 666 阅读 · 0 评论 -
Objective C内存管理进阶(一):实践准则
<br />这个系列打算写一些我对Iphone开发内存管理的理解。是建立在读者对Objective C的内存管理已经有一定理解的基础上,内容将包括实践准则,autorelease原理剖析,内存泄露的调试等。<br /> 在进行IPhone开发时, 内存管理是个相对比较难以理解的东西。Objective-C 使用了一种介于C#和C++之间的内存管理机制。C#是基于Mark-sweep的GC, C++基本上是程序员自己负责分配和释放。 Ojbective-C, 是程序员来负责Mark(通过Release, r转载 2010-12-13 21:46:00 · 619 阅读 · 0 评论 -
Objective C内存管理进阶(三): 调试内存泄露
<br />1)内存的问题是发现越早,解决的代价就越小。所以最重要的是理解Objective C内存管理,遵循我之前提到的实践准则和编码规范。另外,在每个迭代周期要做一些压力和内存测试,尽早发现问题。<br /> 2)利用Clang静态检测工具。在XCode 3.2之后的版本里,Clang已经被集成进来。Build ->Build & Analyze即可运行,它可以发现大部分因为疏忽造成的内存泄露。比如有Alloc没有release等。下图是一次静态检测的结果. 如图所示,Clang清楚的告诉你在145行转载 2010-12-13 21:48:00 · 622 阅读 · 0 评论 -
Objective C内存管理进阶(二):理解autorelease
<br />如果你能够真正的理解autorelease,那么你才是理解了Objective c的内存管理。Autorelease实际上只是把对release的调用延迟了,对于每一个Autorelease,系统只是把该Object放入了当前的Autorelease pool中,当该pool被释放时,该pool中的所有Object会被调用Release。<br /> [1]在Iphone项目中,大家会看到一个默认的Autorelease pool,程序开始时创建,程序退出时销毁,按照对Autorelease的转载 2010-12-13 21:47:00 · 678 阅读 · 0 评论 -
关于字符串反转的实现
<br />题目:用C语言实现字符串的反转。<br /> <br />以下是我用C语言实现的代码。<br /> <br />char* strrev (char* str, char* outStr)<br />{<br /> if (!str)<br /> {<br /> returnNULL;<br /> }<br /> <br /> char *p = str;<br /> char *res = outStr; <br /> <br /> while (*p)<原创 2010-10-23 16:46:00 · 457 阅读 · 0 评论 -
关于单向链表的反转
<br />题目:实现单向链表的反转。<br /> <br />以下是我的代码。<br /> <br />思路一:新建链表,利用临时指针的偏移完成新链表的穿插。<br /> <br />#include<iostream><br />usingstd::cout;<br />usingstd::endl;<br /> <br />structnode<br />{<br /> intval;<br /> node *next;<br />};<br /> <br />voidReverse(node原创 2010-10-18 22:15:00 · 645 阅读 · 0 评论 -
关于两个长整数相乘的实现
<br />题目:实现两个长整数相乘的算法。<br /> <br />此代码可实现任意长度的两个数相乘,实现方法采用单向链表。<br /> <br />以下是我的代码.<br />备注:此代码有参考网上的代码。<br />#include"stdafx.h"<br />#include<iostream> <br /> <br />usingnamespacestd; <br /> <br />#defineMAX 10000 <br /> <br />struct Node<br />{原创 2010-10-18 22:04:00 · 2282 阅读 · 1 评论 -
wxWidgets与其他工具库的比较(下)
GTK+ ● GTK+的网站:www.gtk.org; ● GTK+原本是Gimp的一个工具库,是在LGPL协议下发布的Unix系统GUI库; ● GTK+已经被移植到Windows,VMS以及其他的系统上面(在MacOS X上面现在可以通过苹果的X11应用程序实现,其本地版本正在开发之中),使用相同的API。但是,GTK+的设计初衷是Unix,多平台的开发是后来才加入的; ● GTK+是GNOME用户界面的原始构建库; ● 不同于wxWidgets,GTK+支持C语言(同样转载 2010-10-10 09:33:00 · 1425 阅读 · 0 评论 -
wxWidgets与其他工具库的比较(上)
<br />本文是在wxWidgets Wiki上面找到的一篇,对比了wxWidgets和其他一些界面工具的特点。看到很多朋友在网上询问这些库各自的特点,我想先把这篇文章翻译出来——毕竟这也算是一篇官方的文章,应该比较有说服力吧!这篇文章写于2004年左右,但是很明显某些地方已经更新了,因为Qt 4.5是2009年才发布的!<br /> <br />这是我第一篇翻译,哪里翻译不好敬请谅解!<br /> <br />原文:http://wiki.wxwidgets.org/WxWidgets_Compared转载 2010-10-10 09:32:00 · 1046 阅读 · 0 评论 -
wxWidgets利用tinyxml实现xml解析
最近正在做的一个项目里涉及到xml文件的存取,同事推荐的tinyxml++ ,是c++版本的xml解析包,据说很小巧,好用,于是download了一个下来.顺便在其官方主页上下载了premake.exe用来生成工程文件的.以下是premake的用法. Windowspremake --target cb-gcc [--unicode] [--ticpp-shared] [--dynamic-runtime]<br />Linux<br />premake --target cb-gcc [--unicode转载 2010-10-10 09:35:00 · 680 阅读 · 0 评论 -
C++ XML解析之TinyXML篇
最近使用TinyXML进行C++ XML解析,感觉使用起来比较简单,很容易上手,本文给出一个使用TinyXML进行XML解析的简单例子,很多复杂的应用都可以基于本例子的方法来完成。以后的文章里会讲解使用Xerces进行C++ XML解析的例子,希望大家一起交流。<br />TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。<br /> DOM模型即文档转载 2010-10-10 09:37:00 · 599 阅读 · 0 评论 -
C++ 中什么是内联函数
引入内联函数的目的是为了解决程序中函数调用的效率问题。 函数是一种更高级的抽象。它的引入使得编程者只关心函数的功能和使用方法,而不必关心函数功能的具体实现;函数的引入可以减少程序的目标代码,实现程序代码和数据的共享。但是,函数调用也会带来降低效率的问题,因为调用函数实际上将程序执行顺序转移到函数所存放在内存中某个地址,将函数的程序内容执行完后,再返回到转去执行该函数前的地方。这种转载 2010-04-25 17:11:00 · 801 阅读 · 0 评论 -
关于指针和内存的几个问题
一、"delete p" 会删去 "p" 指针,还是它指到的资料,"*p" ? 该指针指到的资料。"delete" 真正的意思是:「删去指针指到的东西」(delete the thing pointed to by)。同样的英文误用也发生在 C 语言的「释放」指标所指向的记忆体("free(p)"真正的意思是:"free_the_stuff_pointed_to_by(p)" )转载 2010-04-25 17:36:00 · 476 阅读 · 0 评论 -
最大公约数与最小公倍数简单代码
1、求二个数的最大公约数: int MyGCD(int a, int b){ int temp = 0; while(a % b) { temp = b; b = a % b; a = temp; } return b;}2、求二个数的最小公倍数int MyGCM(int a, int b){ int t原创 2010-04-25 17:16:00 · 629 阅读 · 0 评论 -
C++相关网站
以下是我收集的一些开发网站。http://search.csdn.net/CSDN搜索,CSDN还是有非常多的编程资源的,用它的搜索能搜出不少东西。代码类别也比较全面。http://snippets.org/简单实用的代码收集网站,强力推荐。比如你要找个DES加密,要找个数据压缩,找个INI文件操作的C代码等,均能手到擒来。http://www.codase.com/index.html它是一个代原创 2010-04-01 23:15:00 · 491 阅读 · 0 评论