Programming LanguageC/C++
文章平均质量分 63
Jackery_Shh
技术狂!
展开
-
C++/C中内存分配情况详解
一、一个经过编译的C/C++的程序占用的内存分成以下几个部分:1、栈区(stack):由编译器自动分配和释放 ,存放函数的参数值、局部变量的值等,甚至函数的调用过程都是用栈来完成。其操作方式类似于数据结构中的栈。2、堆区(heap) :一般由程序员手动申请以及释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式类似于链表。转载 2014-08-20 11:10:50 · 972 阅读 · 0 评论 -
C++之 typedef void *HANDLE
在书写代码与阅读代码的时候,经常会看到这一句代码: typedef void *HANDLE ,它是何方神圣呢?如何理解呢?不理解它的时候,感觉它很神奇,知道它以后,它就是个typedef的定义,只不过是void*类型罢了,也就是HANDLE等价于void *,我们可以叫它披着句柄皮的指针(PS:指针和句柄是有区别的,在这说句废话);原创 2014-11-20 14:53:17 · 5304 阅读 · 2 评论 -
《C++Primer》学习笔记(6-10章)
第六章 语句1. if (int i = 3) // i转化成bool值true; 迄今为止,在所有用过的类型中,IO类型可以用作条件,vector和string类型一般不可用作条件上面,出了if后,i不可访问,下面出了while之后同样不可访问while (int i = fun(j)) // 每次循环要执行i的创建和撤销过程2. 每个case转载 2014-09-11 12:50:57 · 785 阅读 · 0 评论 -
Effective C++学习笔记(Part Four:Item 18-25)
第4部分:设计与申明(Designs and Declarations)本部分主要讲述了类的设计原则以及设计规则,以及成员命令、成员函数设计时,应该注意的一些地方;个人感觉这是设计好一个类必不可少的。原创 2014-12-23 12:04:29 · 1172 阅读 · 0 评论 -
Effective C++学习笔记(Part Six:Item 32-40)
第6部分:继承与面向对象设计 面向对象语言有三大特性:继承,封装和多态。遥想当年,每次校招笔试的时候都会有的,但能够甚至这六个字内涵的人,不再多数。本部分概括的说,深入的讲解三大特性之一----继承性。本部分花的时间不少,也感觉挺有意思的。特别是针对某个条款编写个具体程序实现后,明白其所以然的时候,无疑是一种享受!原创 2014-12-31 18:32:36 · 816 阅读 · 0 评论 -
关于C++类型检查的一点小挫折
关于C++类型检查的一点小挫折,问题:定义了一个float型数组Lut[],我让一个整型指针指向数组名int * Address=lut ;VS2008报错: error C2440: '=' : cannot convert from 'float [256]' to 'int * '原创 2014-11-10 16:27:35 · 862 阅读 · 0 评论 -
C++开发高级篇(转)
堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局转载 2015-01-05 12:59:59 · 2118 阅读 · 0 评论 -
未来两周目标计划---C++ and Disassembly(不积跬步无以至千里,不积小流无以成江海)
未来两周目标计划---C++ and Disassembly,一点小收获与小进步: 快速锁定屏幕快捷键:window按键(键盘上的像窗口的那个)+ L; 快速打开Windows运行窗口快捷键:window按键 + R ;原创 2014-11-12 10:24:49 · 2197 阅读 · 8 评论 -
C++之typedef 小记
哲学感悟:存在就有其合理性以前曾不知道为何要用typedef,随着开发的深入,真正感受到了其内涵所在:1.如:typedef int DataType接下来项目中的几万行代码中,如果需要将所有的DataType改为float型,如果不用typedef工作量可想而知的;从而起到了精简代码的作用;2.如下: typedef struc DataStru{ ........ ........ }MydataStru,*pMydataStru;当你再定义数据结构时,如果是结构体,直接原创 2014-12-17 18:56:01 · 740 阅读 · 0 评论 -
算法研发---对宏定义#define相关研究
感悟:有时候不是困难来的太突然,而是你没有挑战困难的勇气;作为 A Software Engineer ,很多问题可以从哲学中找到答案;保持清醒的头脑,不断给自己充电,你才会走的更远.........原创 2014-12-17 18:35:42 · 699 阅读 · 0 评论 -
c/c++深入篇之内存分配与内存对齐的探讨
c/c++深入篇之内存分配与内存对齐的探讨 在大多数低层程序设计中,由于内存分配与内存对齐问题所带来的bug所占比重非常大。本文对内存分配中的分配空间类型、作用、方法、适用范围、优缺点以及内存对齐问题中的对齐原因、对齐规则等进行了详细的说明,并结合大量c语言代码进行阐述与分析。原创 2014-12-15 17:55:13 · 1137 阅读 · 0 评论 -
C++高精度性能测试函数
在实际software开发工作中,我们经常会测试某个module或者function的执行效率。或者是某个算法的时间复杂度(虽然时间复杂度一定程度上依赖于机器性能,但在同一台computer上,经过算法优化,可以测试其复杂度);这时候就需要精确获取时间,才可以准确的运行时间,下面的函数实现了精确计时,计时精度可以达到微秒级;可用于测试某个模块的效率!原创 2015-07-08 14:44:23 · 2063 阅读 · 0 评论 -
Effective C++学习笔记(Part Seven:Item 41-48)
第7部分:模板与泛型编程 所谓泛型编程就是以独立于任何特定类型的方式编写代码。使用泛型程序时,我们需要提供具体程序实例所操作的类型或值。模板是泛型编程思想的一种实现,也是C++研发者思想精髓所在。原创 2014-12-31 18:33:52 · 1051 阅读 · 0 评论 -
C++之模板类(Template) 容器之map 及 对象副本 深/浅拷贝 等问题
一般地当我们只想知道一个值是否存在时,set 最有用处;希望存储也可能修改一个相关的值时,map 最为有用. map提供一个键值对容器,在map(也叫关联数组)中我们提供一个键/值对,键用来索引,而值用作被存储和检索的数据. 在使用map和set时两个最主要的动作是向里面放入元素以及查询元素是否存在. 首先要包含头文件#include 定义并生成map转载 2014-08-20 10:46:11 · 1929 阅读 · 0 评论 -
《C++Primer》学习笔记(11-12章)
第十一章算法1. size_t back_inserter 2. 提到的算法find(vec.begin(), vec.end(), ival);find_first_of(vec1.begin(), vec1.end(),vec2.begin(),vec2.end());accumulate(vec.begin(), vec.end(), ival)转载 2014-09-11 12:52:39 · 640 阅读 · 0 评论 -
《C++Primer》学习笔记(1-5章)
第一章 文件头及声明关于extern使用extern 声明而不定义,它是说明变量定义在程序其他地方 全局不初始化的extern int i; 是声明不定义;只要声明并且有初始化式,那么就是定义;带有extern且有初始化的声明(也是定义),比如extern float fval =2.34; 这种必须放在函数外面,否则出错 文件B要访问另外一个文件A中定义的变量转载 2014-09-11 12:45:47 · 972 阅读 · 0 评论 -
struct中初始化中的一个大错误
struct中初始化中的一个大错误,第一次用英文写文字,感觉倍爽儿!原创 2014-11-10 15:55:15 · 930 阅读 · 0 评论 -
Effective C++学习笔记(Part Five:Item 26-31)
第5部分:实现(Implementations)本部分主要讲述了类实现过程中的一些原则,为设计出高效率的实现方式,这是你的必经之路;在这一部分读的比较仔细,因为本人在类型转换这方面吃了不少苦头。原创 2014-12-23 12:07:04 · 1481 阅读 · 1 评论 -
如何利用c++在不按enter键的情况下显示输入的字符
今天是周末,北京的天气越来越热了,偶然在overstackflow上看到这个帖子,不禁回想起学校的点点滴滴,顾翻译如此,如有不当,望各位多多批评指正!Question :Adam:因为不是经常用到,所以我总是记不住如何实现这个功能。在 C/C++ 中,不用到下一行(输入回车)就从标准输入获得字符最好的方法是什么呢?另外如果不用把字符敲入屏幕那肯定是最完美的,但我仅仅想不通过敲控制台(Enter)就获得键盘输入。Some answers:Best one,来自 Johannes Schaub翻译 2015-05-24 22:21:54 · 5328 阅读 · 0 评论 -
C++矩阵乘法
用惯了数学库,有的时候有些基本的运算,像矩阵求逆,转置矩阵什么的,写起来突然感觉有些生疏了,这里算是对一些基本线性代数的复习。用C写矩阵乘法; 注意点: (1)二维数组与二级指针的区别; (2)矩阵乘法的要点,新的结果矩阵的第i行第j列是矩阵A的第i行与矩阵B的第j列的乘积,这一点不熟悉,写程序就会有点吃力;对程序结构思路就会存在不清晰的地方; (3)有很多可原创 2017-03-09 17:30:20 · 3570 阅读 · 1 评论 -
无参函数模版实例化
//无参数模版函数templateT * fun() { std::cout << typeid(T).name() << std::endl;return nullptr;}int main(int argc, char* argv[]){ fun(); fun(); fun(); fun();}原创 2017-02-07 18:02:40 · 988 阅读 · 0 评论 -
字符拷贝时字符串结束符'\0'很重要
近期由于memcpy字符串的时候,没有将结束符拷贝进去,导致字符串结尾有乱码,如图: std::ostringstream osg; osg.str(""); osg "; string p = osg.str(); int len = strlen(p.c_str()); char * buffer = new char[len](); memcpy(buffer,原创 2016-12-29 14:42:58 · 7026 阅读 · 0 评论 -
C++强大背后
转自:http://www.cnblogs.com/miloyip/archive/2010/09/17/behind_cplusplus.html在31年前(1979年),一名刚获得博士学位的研究员,为了开发一个软件项目发明了一门新编程语言,该研究员名为Bjarne Stroustrup,该门语言则命名为——C with classes,四年后改称为C++。C++是一门通用编程语言,支持多种编程转载 2016-11-10 10:06:34 · 530 阅读 · 0 评论 -
c++11 条款21:尽量使用std::make_unique和std::make_shared而不直接使用new
尽量使用std::make_unique和std::make_shared而不直接使用new转载 2016-06-25 23:15:49 · 2400 阅读 · 0 评论 -
Windows7下安装Mingw-w64
From What MinGW Is ? I recommend that anyone who is learning Standard C++ and who uses Windows for a primary development environment should use two compilers: the most modern version of Microsoft转载 2016-05-29 16:16:43 · 4413 阅读 · 0 评论 -
设计一个线程安全的单例(Singleton)模式
在设计单例模式的时候,虽然很容易设计出符合单例模式原则的类类型,但是考虑到垃圾回收机制以及线程安全性,需要我们思考的更多。有些设计虽然可以勉强满足项目要求,但是在进行多线程设计的时候。不考虑线程安全性,必然会给我们的程序设计带来隐患。此处,我们不介绍什么是单例模式,也不介绍如何设计简单的设计模式,因为你完全可以在书上或者在博客中找到。此处我们的目的就是设计一个使用的单例模式类。单例模式需要注意与思考的问题:(1)如何仅能实例化一个对象?(2)怎么样设计垃圾回收机制?(3)如何确保线程安全性?原创 2015-12-08 09:43:23 · 2771 阅读 · 0 评论 -
C++ vector容器的4种遍历方式
C++ vector容器的4种遍历方式原创 2015-12-22 21:54:57 · 17423 阅读 · 1 评论 -
C++中获取数据类型typeid
有时候,为了达到某种目的,我们需要获取数据类型,这个类型无论是内置类型还是自定义类型,包括类类型; 在揭开typeid神秘面纱之前,我们先来了解一下RTTI(Run-Time Type Identification,运行时类型识别),它使程序能够获取由基指针或引用所指向的对象的实际派生类型,即允许“用指向基类的指针或引用来操作对象”的程序能够获取到“这些指针或引用所指对象”的实际派生类型。在C++中,为了支持RTTI提供了两个操作符:dynamic_cast和typeid。 dynamic_cas原创 2015-09-16 14:51:16 · 10559 阅读 · 0 评论 -
由strcpy()剖析编程规范
先给出几种实现方式:方式一:char* strcpy(char* des,const char* source) { char* r=des; while((*(des++)=*(source++))!='\0'); return r; }方式二:char * strcpy(char * strDest,const char * strSrc){if ((NULL==strDest) || (NULL==strSrc)) //[1]throw "Invalid argument原创 2015-02-03 15:50:34 · 899 阅读 · 0 评论 -
Algorithm One Day One -- 约瑟夫环(丢手绢问题)
算法是编程的灵魂,是编程思想的精髓————Algorithm One Day One /******************************************************************** created:2015年1月20日 23:06:46 author: Jackery purpose: Joseph problem **************************************************************原创 2015-01-21 11:31:32 · 2884 阅读 · 5 评论 -
高斯平滑 高斯模糊 高斯滤波器 ( Gaussian Smoothing, Gaussian Blur, Gaussian Filter ) C++ 实现
发展到现在这个平滑算法的时候, 我已经完全不知道如何去命名这篇文章了, 只好罗列出一些关键字来方便搜索了.在之前我们提到过了均值滤波器, 就是说某像素的颜色, 由以其为中心的九宫格的像素平均值来决定. 在这个基础上又发展成了带权的平均滤波器, 这里的高斯平滑或者说滤波器就是这样一种带权的平均滤波器. 那么这些权重如何分布呢? 我们先来看几个经典的模板例子:原创 2015-02-05 11:30:02 · 1649 阅读 · 0 评论 -
梯度、散度和旋度及在图像处理中的应用(图像融合)
对于有些人,看这些枯燥的公式符号是件痛苦的事情;但痛苦后总会有所欣喜,如果你充分利用它的话,你更能体会到他的美妙;先来几张效果图,激发你学习数学的欲望: 注释:图像融合效果,分别应用了不同的算法在图像图形处理中, 梯度、散度和旋度 有很重要的作用,比如图像修复中的解泊松方程,目标跟踪等等,可以说是他们无处不在。来句废话:可能有些人,对于数学符号里面倒三角 正三角 符号的意思?与读法感到迷惑,现稍作解释;△二次函数根的判别式或者指三角形▽读Nabla,奈原创 2015-02-11 18:57:48 · 8326 阅读 · 2 评论 -
哈希表算法实现
本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明.环境:主机:WINXP开发环境:MINGW说明:本程序建立的哈希表示意图:哈希函数为对哈希表长取余源代码:[cpp] view plaincopy/*****************转载 2014-10-16 16:00:21 · 905 阅读 · 0 评论 -
变量在内存中的存储方式-----“大端”和“小端”
“大端”和“小端”可以追溯到1726年的Jonathan Swift的《格列佛游记》,其中一篇讲到有两个国家因为吃鸡蛋究竟是先打破较大的一端还是先打破较小的一端而争执不休,甚至爆发了战争。1981年10月,Danny Cohen的文章《论圣战以及对和平的祈祷》(On holy wars and a plea for peace)将这一对词语引入了计算机界(《程序设计实践》第9章)。这么看来,所谓大端和小端,也就是big-endian和little-endian,其实是从描述鸡蛋的部位而引申到计算机地址的描述原创 2015-08-25 19:16:44 · 4275 阅读 · 0 评论 -
__declspec(dllexport)
先看代码:以下是在dev-c++里建立自已的dll时的dll.h里面的代码,这里面有一个:_declspec(dllexport)#ifndef _DLL_H_#define _DLL_H_//防重复定义#if BUILDING_DLL# define DLLIMPORT __declspec (dllexport)#else# define DLLIMPORT __declspec (dllim转载 2015-08-11 15:49:22 · 805 阅读 · 0 评论 -
关于Github 的 Watch , Star和Fork
对于刚接触github初学者而言,玩玩被github的一些词搞得晕头转向,在这里对一些容易产生疑惑的地方,做一些必要的解释,从而爱上github;About watch ,star, fork 最早的时候 github 是只有 watch 的,然后 github发现很多人 watch 项目只是拿来当收藏夹用的,于是就有了 star。自从Github 推出了新的 Notification 系统,就更改了原来原有的 Watch 机制,为代码库增加了 Star 操作。watch 的作用类似于csdn原创 2015-07-26 00:16:32 · 2262 阅读 · 3 评论 -
能否重拾Linux下Init 3的快感?
对于Windows大多数程序员(目前),是否很怀念Linux下全字符界面的炫酷与优越感?是否仍然停留在cmd后,将文件拖到dos下简单的操作呢?下面是最近研究在Windows下用全命令行的方式操作文件的一些收获,如下:首先打开Dos:方法一:直接按windins键(键盘田字形的那个键)方法二:window按键 + R原创 2014-12-22 16:12:55 · 2054 阅读 · 1 评论 -
获取文件路径函数之GetModuleFileName()
获取文件路径函数之GetModuleFileName()在项目中,经常会需要获取相对路径与绝对路径的问题,这里暂时先给出获取当前获取可执行程序exe文件函数,还会涉及到字符串拼接等问题;暂时没时间记下来;在这里GetModuleFileName这个函数是关键,它既可以得到当前应用程序exe文件的路径,还可以知道dll文件的路径,这主要取决于第一个参数,如果第一个参数为NULL,则表示获取的是当前应用程序exe文件的路径,如果第一个参数是GetModuleHandle("dll文件名名称"),则获取的是d原创 2014-12-12 16:37:07 · 1195 阅读 · 0 评论 -
Effective C++学习笔记之对RAII思想的思考
在阅读 Effective C++时,对RAII开始不理解,现总结如下: RAII是Resource acquisition is initialization的缩写形式,即“资源获取就是初始化”,是C++等编程语言常用的管理资源、避免内存泄露的方法。它保证在任何情况下,使用对象时先构造对象,最后析构对象。 根据RAII 对资源的所有权可分为常性类型和变性类型,代表者分别是boost:shared_ptr和std::auto_ptr;从所管资源的初始化位置上可分为外部初始化类型和内部初始化类型。原创 2014-12-29 16:38:05 · 1937 阅读 · 6 评论 -
C++之延时函数的研究
从论坛上转来的:(—)使用_sleep()函数 #include using namespace std; _sleep(5*1000);//延时5秒 (二)使用Delay(int time)函数 #include void Delay(int time)//time*1000为秒数 { clock_t转载 2014-12-23 15:45:37 · 1085 阅读 · 0 评论