C/C++基础
文章平均质量分 52
C/C++基础
昊虹AI笔记
我的每一篇文章末尾都有我的个人网站名片~
展开
-
C/C++的“文件包含”处理探究
所谓“文件包含”处理是指一个源文件可以将另一个源文件的全部内容包含进来,即将另外的文件的内容包含到本文件之中。C/C++提供了#include命令来实现“文件包含”的操作。C/C++在编译时并不是对两个文件分别进行编译,而是在编译预处理阶段把被包含文件的内容也加到主文件中,得到一个新的源程序,然后对这个新的源程序进行编译。常用在主文件头部的被包含的文件通常称为头文件,常以后缀“.h”或“.hpp”结尾。当然用后缀“.c”或“.cpp”甚至没有后缀也是可以的。本博文就“文件包含”操作进行一些探究。答案是可以原创 2022-07-08 19:02:11 · 1575 阅读 · 0 评论 -
C/C++的“文件包含”处理时头文件被重复包含的问题探究及解决方法(用最简单的例子进行说明)
C/C++的“文件包含”处理时头文件被重复包含的问题探究及解决方法原创 2022-07-08 15:45:40 · 3643 阅读 · 0 评论 -
从cmath文件看名字是怎样被添加到命名空间std中的
从cmath文件看名字是被添加到命名空间std中的原创 2022-07-07 15:25:06 · 288 阅读 · 0 评论 -
将VS2013的C/C++标准库math中的59个函数过一遍
将VS2013的C/C++标准库math中的59个函数过一遍原创 2022-07-07 14:40:05 · 1674 阅读 · 0 评论 -
MATLAB、C++、OpenCV、Python、Python-Numpy近似值(取整)求取函数总结【round()、ceil()、floor()、fix()】
MATLAB、C++、OpenCV、Python、Python-Numpy近似值(取整)求取函数总结【round()、ceil()、floor()、fix()】原创 2022-06-29 11:50:57 · 2488 阅读 · 0 评论 -
C++、C++-OpenCV、Python、Python-Numpy、MATLAB的除法取余(余数)方法总结
C++、C++-OpenCV、Python、Python-Numpy、MATLAB的除法取余方法总结原创 2022-06-29 09:33:20 · 5911 阅读 · 0 评论 -
C/C++和Python编程时NULL和None傻傻分不清楚
C/C++和Python编程时NULL和None傻傻分不清楚原创 2022-06-23 09:46:44 · 1780 阅读 · 0 评论 -
使用C++的函数memset()时要注意它的操作对象是每一个字节
函数memset()的作用是将某一块内存中的内容按字节全部设置为指定的值, 这个函数通常为新申请的内存做初始化工作。函数memset()的介绍大家可参见百度百科,写得很清楚了,百度百科链接如下:https://baike.baidu.com/item/memset/4747579使用C++的函数memset()时要注意它的操作对象是每一个字节,所以不能用它将int数组初始化为0和-1之外的其他值(除非该值高字节和低字节相同)。比如我想利用它把int型数组的每一个元素的值全部置为88是不行的,测试代码如下:原创 2022-06-17 17:44:32 · 324 阅读 · 0 评论 -
C++中常用变量在内存中所占的字节数分别是多少?(使用函数sizeof()实测一下不就知道了)
关于C++中常用变量在内存中所占的字节数这个问题,其实没有统一的答案。因为不同的机器、不同的硬件平台、不同的系统都有可能有不同的标准,特别是整型变量,更是如此。最好的方式就是用函数sizeof()实测一下。比如博主用于测试自己当下使用的C++环境各种变量在内存中所占的字节数的代码和结果如下:运行结果如下图所示:所以对于博主当下的C++环境,结果就是:...原创 2022-06-17 17:00:15 · 1043 阅读 · 0 评论 -
在C++中,浮点型数据(float型)向uchar(unsigned char)强制类型转换的结果是怎么样的?
C++中,浮点型数据(float型)向uchar(unsigned char)强制类型转换是一种什么样的结果?用实际的例子测试一下就行了。运行结果如下:从中可以看出,不管是运行自动转换出的结果b3,还是强制类型转换出的结果b2,都是对浮点数7.96875向下取整的结果。所以结论就是:在C++中,浮点型数据(float型)向uchar(unsigned char)强制类型转换是一种向下取整的运算。相当于很多语言或库中的floor()函数的效果。延伸阅读:C/C++中各类数值型数据间的混合运算法则...原创 2022-06-17 11:14:20 · 3663 阅读 · 0 评论 -
C/C++中各类数值型数据间的混合运算法则
C/C++中各类数值型数据间的混合运算法则原创 2022-06-17 11:10:43 · 357 阅读 · 0 评论 -
用cout输出uchar(unsigned char)变量时,没有输出结果怎么办?
在OpenCV中uchar实际上就是unsigned char,其定义如下:在图像处理中,我们经常用unsigned char代表我们的灰度值,因为灰度值的范围刚好是0~255嘛。于是,习惯性地用久之后我们就容易真把它当成一个0~255的数值型变量了。但实际上,它是字符型变量,所以当我们cout输出下面变量的值时,你是看不到什么结果的。原因见下面这幅图:附一个ASCII码对照表的链接:https://zhuanlan.zhihu.com/p/408357733我们把上面的a1和b1的值改一下,原创 2022-06-17 10:23:21 · 2108 阅读 · 0 评论 -
Python-OpenCV难道比C++_OpenCV快?以调用Canny边缘检测函数为例
如果不调用第三方库,C++比Python快很多是不争的事实,下面的这些博文都以实际例子证明了C++比Python快很多的事实。python和C++的性能分析(寻找素数)python运行速度和c_Python与C++之间运行速度对比与Python的速度较量:C++究竟有多快?Python和C语言运行速度对比(累加1亿次)但是调用第三方库的情况可能就有所不同。博主曾听说,我们在Python中使用的OpenCV,实际上是用C++写好的OpenCV代码进行编译得到的,本质上只是用Python调用C++程序原创 2022-06-16 15:09:51 · 2774 阅读 · 3 评论 -
详解C++标准库<sstream>中的类stringstream,并利用它实现OpenCV下的图片批量读取
本文详解C++标准库中的类stringstream,并利用它实现OpenCV下的批量图片读取。目录一、字符串格式化函数sprintf()存在的问题二、详细介绍C++标准库中的类stringstream三、利用C++标准库中的类stringstream实现OpenCV下的图片批量读取一、字符串格式化函数sprintf()存在的问题在进行图像处理时,我们常常需要批量读取图片,本文就说下如何利用C++标准库中的类stringstream实现OpenCV下的批量图片读取。当然本文要批量读取的图片在名字上是有原创 2022-04-30 09:12:40 · 941 阅读 · 0 评论 -
使用C/C++的#include命令(文件包含命令)时,文件名用尖括号或双撇号(双引号)括起来的区别
C/C++的#include命令的文件名有以下两种形式:#include <文件名>#incluce "文件名"二者的区别是:用尖括号时,系统到编译器预先配置好的库目录寻找要包含的文件。比如在我的VS中,它会到以下目录中去寻找要包含的文件。用双撇号时,系统先到C/C++文件所在的目录(即用户当前目录)中寻找要包含的文件,若找不到,再到预先配置好的库目录寻找要包含的文件。.........原创 2022-04-26 18:02:31 · 2338 阅读 · 0 评论 -
OpenCV中Mat类的运算符operator()的定义
Mat类中的运算符“()”的定义如下:inline Mat Mat::operator()( Range _rowRange, Range _colRange ) const{ return Mat(*this, _rowRange, _colRange);}从这个定义我们可以知道,Mat类中的运算符“()”的作用是选取图片中的某个区域,并且返回Mat类指针!下面是一个应用示例:hsv_half_down = hsv_base( cv::Range( hsv_base.....原创 2016-06-08 12:31:06 · 6728 阅读 · 0 评论 -
利用C++中的函数getTickCount()和getTickFrequency()测量代码段的运行时间
利用C++中的函数getTickCount()和getTickFrequency()测量代码段的运行时间原创 2016-05-31 15:54:59 · 1690 阅读 · 0 评论 -
VS下的C++代码引用文件时文件路径要用正斜杠“/”,而不能用反斜杠“\“
下面的代码运行无问题:int main (){ // 源图像载入及判断 cv::Mat srcImage = cv::imread ("F:/material/images/P0028-flower-02.jpg"); if( !srcImage.data ) { std::cout<<"Failed to load image"<<std::endl; return 1; }...... return 0;}但是下面的代码运行时原创 2022-04-19 22:59:30 · 1375 阅读 · 4 评论 -
OpenCV1.x中的CV_IMPL是什么意思?
在cvEqualizeHist的函数定义源码中发现了宏定义CV_IMPL,如下:CV_IMPL void cvEqualizeHist( const CvArr* srcarr, CvArr* dstarr )上网查询CV_IMPL的含义如下:在internal.hpp文件里面有定义:# define CV_IMPL CV_EXTERN_C而关于CV_EXTERN_C,则在types_c.h里面有定义# define CV_EXTERN_C extern "C"其实就相当于extern..原创 2016-04-21 12:18:08 · 3505 阅读 · 2 评论 -
C++引入名字空间(namespace)意义何在?为什么using namespace std会成为常用语句?
名字空间(namespace)的最大意义大于解决名字重复问题,下面是问题的来龙去脉。在没有引入名字空间的概念之前,用户在一个cpp文件(即C++代码的源码文件)的开始位置一般会引入头文件,比如<stdio.h>,这里面就有已经定义好的全局变量、函数名、和类名,如果这些全局变量、函数名、和类名数目不多,那程序员在写自己的程序时引入的新名称还不容易重复。但是如果很不幸引入了多个头文件,那么这些头文件里的全局变量、函数名、和类名非常多,程序员在写自己的代码段时就很容易造成名字重复了。若我们同时原创 2016-03-15 11:31:26 · 7388 阅读 · 1 评论 -
C++中可以以“类名::成员函数”直接引用成员函数哦!
直接上图吧,编译通过,程序运行无问题:原创 2016-07-08 15:01:43 · 3626 阅读 · 0 评论 -
VC中各数据类型所表示的范围和占用的字节数是多大?
VC中各数据类型所表示的范围和占用的字节数是多大?原创 2016-05-06 10:52:02 · 2906 阅读 · 0 评论 -
要看懂OpenCV的代码,所需要的C和C++的基础知识
要看懂OpenCV的代码,所需要的C和C++的基础知识原创 2016-04-08 17:27:37 · 2478 阅读 · 0 评论 -
将C/C++程序的变量数据导入到MATLAB中的方法
在阅读这篇博文前,请大家先阅读我的上一篇博文,因为这篇博文的思路来自于我的上一篇博文,链接如下:https://blog.csdn.net/wenhao_ir/article/details/51007255下面直接说将C/C++程序的变量数据导入到MATLAB中的方法:先上VC导出变量数据的代码:#include <fstream>using namespace std;int main(){ int a[6]={1,2,3,4,5,6};//注意:这里的类型一定要是原创 2016-03-30 13:37:30 · 7676 阅读 · 0 评论 -
c++中的关键字new是什么东西?
“new”是C++的一个关键字,它通常用来在堆上创建数组或对象,但它与一般的创建数组或对象的方法不同,它在创建数组或对象时,会返回这个对象的指针。提问:堆是什么东西?它与栈有什么区别?回答:栈区——由编译器自动分配和释放,一般存放函数的参数值、局部变量的值等(速度较快);堆区——由程序员分配及释放,若程序员不释放,程序结束后可能由OS回收(速度比较慢,而且容易产生内存碎片)。所以我们在使用堆的时候要注意用完后及时的释放它。栈的速度快,但因为是内存中的一块连续区域,所以资源宝贵,通常不大。堆的话不要求原创 2016-06-03 10:56:19 · 16170 阅读 · 3 评论 -
#define CV_DEFAULT(val) = val 这样的宏定义是没有问题的~
#define CV_DEFAULT(val) = val这样的宏定义是没有问题的 我最开始以为有问题,是因为没看到等号前边还有一个空格,这句话实质上是把代码中本应该为= val的替换为了CV_DEFAULT(val) 举一个例子吧:int y;int x=5;y CV_DEFAULT(x);//这句话相当于y = x;图像处理开发资料、图像处理开发需求、图像处理接...原创 2016-05-20 11:14:07 · 849 阅读 · 0 评论 -
C++的静态库lib是可以包含函数的注释(说明文档)的
我们都知道,在VS中把鼠标放置于函数名上,会显示函数的说明文档。如下图所示:上面函数的说明来自于哪里,超初我以为是来自于头文件中对函数的声明,于是我跳转到相应的头文件,结果发现内容不一样,大家可以对比下下面两幅截图。很明显,是不一样的描述。问题来了,我的整个工程中根本没有上面的函数detect()的源码,工程中我只包含了几个静态库lib文件和头文件,搜索完所有的头文件也没有发现第一张截图中的文字说明。那其来源就只能是我引用的静态库了。搜索lib文件的相关信息,发现下.原创 2022-05-07 17:20:48 · 2061 阅读 · 0 评论 -
详解语句srcImage(cv::Rect(xRoi,yRoi,widthRoi,heightRoi)).copyTo(roiImage);
对语句srcImage(cv::Rect(xRoi,yRoi,widthRoi,heightRoi)).copyTo(roiImage);理解的前提是正确划分语句,首先把这句话分成两段,如下:srcImage(cv::Rect(xRoi,yRoi,widthRoi,heightRoi)) . copyTo(roiImage);可见,其实是点这个运算符把语句分成了两段。s...原创 2016-05-31 11:03:14 · 5095 阅读 · 0 评论 -
C/C++中栈溢出/Stack overflow怎么办?
VC中栈溢出/Stack overflow怎么办?阅读下面三篇文章就知道怎么办了!1 http://www.cnblogs.com/areliang/archive/2012/05/11/2495470.html2https://baike.baidu.com/item/static/95989193 http://blog.csdn.net/yusongwhu/article/details/3428247通过阅读第1篇文章我发现在大数组/二维数组前加static是解决方法!当然因.原创 2016-05-05 16:15:35 · 2107 阅读 · 0 评论 -
C/C++中判断两个变量的大小相等关系时要特别注意数据深度不够带来的影响
先上有问题的程序图:理论上 S[50]和G[60]应该是相等的,所以(G[j] - S[i]) >= 0应该是满足的,但实际上根据上面内存变量跟踪值,G[j] - S[i]是小于0的,所以导致语句:( (G[j] - S[i]) < min_val && (G[j] - S[i]) >= 0)的值为False,这样程序就不是我们预期的!怎么办呢?既然是由数据深度不够引起的,那我们更改它们的数据类型就行了。比如上述的数组G和数据S,数据类型为int,我原创 2022-04-27 11:36:17 · 3594 阅读 · 0 评论 -
理解OpenCV中的宏定义 CVAPI(函数返回类型)
读代码时看到语句 CVAPI(IplImage*) cvCreateImage( CvSize size, int depth, int channels ); 遂想了解下这个CVAPI到底是怎么回事!#define CVAPI(rettype) CV_EXTERN_C CV_EXPORTS rettype CV_CDECLCV_EXTERN_C 的宏定义是#define CV_EX...原创 2016-05-20 11:54:31 · 3452 阅读 · 0 评论 -
OpenCV中# define CV_EXPORTS __declspec(dllexport)的含义
# define CV_EXPORTS __declspec(dllexport)问题出自:class CV_EXPORTS Mat{...................};__declspec关键字 __declspec(dllexport)声明一个导出函数,是说这个函数要导出成DLL(动态链接库),我要给别人用。__declspec(dllimport)声明一个导入函数,是说这个函数是从别的DLL(动态链接库),导入。不使用__declspec(dllimport..原创 2016-05-24 12:00:31 · 2963 阅读 · 0 评论 -
C++类中成员函数声明后面的const的含义
C++类中成员函数声明后面的const的含义原创 2016-06-08 12:13:59 · 12099 阅读 · 1 评论 -
C/C++函数参数传递时值传递、指针传递、引用传递的区别是什么?
值传递:形参是实参的副本(复制、拷贝),形参值的改变不会影响实参的值,这种方式是很常见的。指针传递:形参是指针类型,形参作指针运算后指向的就是实参,所以会影响实参的值。这种方式也是很常见的。引用传递:在调用函数时将实际参数的地址传递到函数中,那么在函数中对参数所进行的修改,将影响到实际参数。这种方式我觉得是并不常见的,后来证实其实也常用。下面对三种情况分别举例:值传递的例子:...原创 2016-06-08 10:59:49 · 9348 阅读 · 0 评论 -
将MATLAB的变量数据导入到C/C++程序中的方法
怎样将将MATLAB的变量数据导入到C/C++程序中?最开始,我想在VC中直接调用MATLAB-Workspace中的变量,即通过混合编程的方式来实现将MATLAB的变量数据导入到VC中,如果以后还需要这种方法,可以参考以下资料:http://www.tuicool.com/articles/eQBrQvahttp://blog.sina.com.cn/s/blog_67d069a90100q37c.html博主2022-04-15注:上面两篇,第一篇要注册登陆才能看了,我这里注册了一个帐号,分享给原创 2016-03-29 16:46:06 · 8372 阅读 · 0 评论 -
C++中的动态数组vector怎么用?
vector是C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的.原创 2016-03-21 15:04:44 · 11994 阅读 · 0 评论 -
C/C++中typedef详解与使用示例
除了可以直接使用C/C++提供的标准类型名(如int、char、float、double、long等)和自己声明的结构体、共用体、指针、枚举类型外,还可以用typedef声明新的类型名来代替已有的类型名。原创 2016-03-19 11:05:48 · 1659 阅读 · 0 评论 -
详解让人闹心的C++语句 cout<<“Hello“<<endl;
详解让人闹心的C++语句 cout<<“Hello“<<endl;原创 2016-03-15 11:57:33 · 32315 阅读 · 11 评论 -
详解C++中经常看到的#include <iostream> using namespace std;
在cpp文件中,我们经常看到#include <iostream> using namespace std; 这两句连用。问题来了对于从C切换到C++的程序员而言为啥iostream 不写成iostream.h?答:在C++引入名字空间的含义之前,都是用#include<iostream.h>这样的写法的,因为要包含进来的头文件名就是iostream.h。标准C++引...原创 2016-03-15 11:54:10 · 17253 阅读 · 0 评论 -
看别人的C/C++代码时发现自己所不知道的语法~
1 定义时可以有些变量作初始化,有些不作初始化,如下面所语句Mat img0 = imread(filename), imgGray;2 for循环的最后一个“参数”可以有多个语句,如下:for( ; idx >= 0; idx = hierarchy[idx][0], compCount++ ) drawContours(markers,...原创 2016-07-19 10:44:06 · 1155 阅读 · 1 评论