c/c++语言
c/c++语言使用
梦回兵工厂
这个作者很懒,什么都没留下…
展开
-
c++ map容器的内存回收
调用clear()后,会把容器中所有元素清除(size变成0)、同时被删除元素对应的内存给到内存池memory pool(memory pool用于管理小片段内存/内存碎片并做次级内存分配,clear的时候内存会交还给memory pool而不会真正释放给系统OS)。该类具有reserve()/capacity() 成员函数,可以利用swap()、shrink_to_fit()等函数来释放空间。该类容器调用clear(), swap()都无法使得内存真正释放!代码1 使用swap()释放vector内存。原创 2022-11-20 23:12:19 · 3375 阅读 · 0 评论 -
c/c++4个内存分区介绍
c/c++内存四个区:代码区,全局区,栈区,堆区内存分不同区的意义**:**不同区域存放的数据,赋予不同的生命周期,给我们更大的灵活编程代码区和全局区都是在程序运行前存在的,栈区和堆区是在程序运行后存在的原创 2022-11-20 15:44:20 · 983 阅读 · 1 评论 -
关于C++解决内存泄漏问题的心得
内存泄漏定位、监测工具、new、delete、malloc、free、分块注释asan(AddressSanitizer)、Sonarqube、vscode-cppcheck插件等;内存监测工具(linux):top、Telegraf+Influxdb+Grafana三件套。原创 2022-11-13 21:20:38 · 1448 阅读 · 0 评论 -
C++功能模块9:ifstream 读取加载模型权重文件至内存
【代码】C++功能模块9:ifstream 读取加载模型权重文件至内存。原创 2022-11-03 16:35:37 · 287 阅读 · 0 评论 -
C++ fstream类移动读写指针和字节数形式获取该指针位置(seekp、seekg、tellg、tellp)
ios::cur:在此情况下,offset 为负数则表示将读指针(或写指针)从当前位置朝文件开头方向移动 offset 字节,为正数则表示将读指针(或写指针)从当前位置朝文件尾部移动 offset字节,为 0 则不移动。要获取文件长度,可以用 seekg 函数将文件读指针定位到文件尾部,再用 tellg 函数获取文件读指针的位置,此位置即为文件长度。在读写文件时,有时希望直接跳到文件中的某处开始读写,这就需要先将文件的读写指针指向该处,然后再进行读写。所谓“位置”,就是指距离文件开头有多少个字节。原创 2022-11-03 16:34:06 · 1690 阅读 · 0 评论 -
C++里除法的结果类型与取整原则
【代码】C++里除法的结果类型与取整原则。原创 2022-11-02 18:19:16 · 3026 阅读 · 2 评论 -
c++版opencv中的Mat数据类型的说明
一直使用mat,很好用,但是细扣又说不清楚到底是怎样的一种数据类型,今天学习下。原创 2022-10-29 16:43:05 · 3984 阅读 · 0 评论 -
关于错误使用cudaDeviceReset()函数,导致多线程下cuda错误、进程崩溃的问题
例如,可以在整个进程结束的时候,对cuda进行reset,毕竟GPU和CPU执行程序是异步的,且根据目前了解发现,不少cuda函数或工具,对gpu操作时、是直接对整块GPU操作、而不是其中的某“线程”。在程序执行了一段时间后,必现地随机报cuda的某个函数执行错误,如cudaMalloc函数执行错误、cudaStreamSynchronize函数执行错误等,并且每次报错的线程也随机,很难定位是具体哪个线程内的代码问题(备注:每个线程对应一个场景任务,其代码都不一样,如人脸检测、异常行为检测等)。原创 2022-10-29 15:27:31 · 2187 阅读 · 1 评论 -
C++功能模块8:点到线段的最短距离
在二维平面上,给出三个点的坐标分别为A(ax,ay), B(bx,by), C(cx,cy),求点A到线段BC的最短距离。从点A向直线BC作垂线,垂足可能在线段BC的左侧,在线段BC上,或者在线段BC的右侧三种情况,下面分别讨论。最短距离是三角形ABC以边BC的高,可通过海伦公式先求出面积,再求出高得到答案。最短距离显然是AB。原创 2022-10-26 11:12:04 · 1751 阅读 · 0 评论 -
C++功能模块7:获取字符串类型的当前时间
【代码】C++功能模块7:获取字符串类型的当前时间。原创 2022-09-21 10:34:21 · 422 阅读 · 0 评论 -
makefile设置宏定义进行条件编译,实现多版本代码同时维护
由于项目需求,本人需要同时维护多套代码(不同场景版本、debug版、release版等),同时每套代码之间大同小异,因此想通到设置宏定义进行条件编译,实现代码的多版本管理。优点:该种方法,只需要在makefile中定义好宏定义,其他地方不需要再定义,因为此时宏定义作用域为工程的所有文件。效率高、不容易出错。缺点:宏定义作用域有限,当需要在较多工程文件内条件编译时,需要注意定义宏定义,效率低、容易出错。补充2、makefile中变量值后面的空格问题。优点:写法简单,即插即用。原创 2022-09-16 09:59:33 · 3308 阅读 · 2 评论 -
C++头文件在预处理时的操作
这句话这么说的:细品。。。原创 2022-09-08 15:33:12 · 282 阅读 · 0 评论 -
makefile中变量值后面的空格问题
在makefile中想要使用ifeq()函数,来实现根据不同场景的条件编译。但是ifeq()对比的内容明明看上去一样,就是没法进入相应。原创 2022-09-07 18:07:15 · 1300 阅读 · 0 评论 -
C++功能模块6:打开视频文件并获取视频属性
【代码】C++功能模块6:打开视频文件并获取视频属性。原创 2022-08-31 17:34:28 · 1289 阅读 · 0 评论 -
C++ auto用法示例
*而是否会造成编译期的时间消耗,我认为是不会的,在未使用auto时,编译器也需要得知右操作数的类型,再与左操作数的类型进行比较,检查是否可以发生相应的转化,是否需要进行隐式类型转换。其实在C++98标准中就有该关键字了,但是和c++11中的用法差别就大、且c++98中的较为鸡肋,以下仅说C++11中的情况。当模板函数的返回值依赖于模板的参数时,我们依旧无法在编译代码前确定模板参数的类型,故也无从知道返回值的类型,这时我们可以使用auto。2、定义模板参数时,用于声明依赖模板参数的变量。.........原创 2022-08-29 14:52:21 · 1496 阅读 · 0 评论 -
C++功能模块5:在图像里截取矩形子图
直接上代码Mat img= imread("1.jpg");Rect rect(50,20, 200, 50); Mat ROI = img(rect); 其中:Rect的函数定义为: Rect(_Tp _x, _Tp _y, _Tp _width, _Tp _height);_Tp _x:表示矩形左上角顶点的x坐标; _Tp _y:表示矩形左上角顶点的y坐标;_Tp _width:表示矩形框的宽度 ; _Tp _height:表示矩形框的高度.........原创 2022-08-25 23:03:44 · 527 阅读 · 0 评论 -
opencv里cols、rows分别对应宽(列)、高(行)
rows:row的复数,行,即图像的高,height。原创 2022-08-25 22:56:21 · 2977 阅读 · 0 评论 -
C++功能模块4:OpenCV键盘控制视频暂停与退出
if(c==’ ') //按空格采集图像。原创 2022-08-23 10:34:25 · 1216 阅读 · 0 评论 -
C++功能模块3:ofstream创建、写txt/cvs文本
直接上代码、、、#include#includeusing namespace std;//1、创建文件输出流,并打开流向的文件ofstream ofs;ofs.open(“txtName.txt”,ios::out );//2、输出内容,格式和std::cout一样ofs << “context” << endl; //endl用于换行//3.使用完关闭流ofs.close();、、、补充:写.cvs文件流程一样,只不过第一步打开的文件名后缀为.cvs;原创 2022-08-19 00:14:37 · 2767 阅读 · 0 评论 -
C++功能模块2:mkdir()创建文件夹目录
C++创建目录--Linux判断某目录是否存在,若不存在创建该目录。原创 2022-08-18 09:47:26 · 12005 阅读 · 5 评论 -
多线程调用high_resolution_clock计算接口耗时,发生计时错误
多线程下调用std::chrono::high_resolution_clock计算接口的耗时,为了防止多线程下计时变量冲突出现计时错误,已经将计时变量设置为局部变量、而非全局变量了。但是,结果还是出现了计时错误:多个线程下,某个线程的计时应该是几十毫秒,变成了好几十秒。问题目前不知道在哪,先mark下,后面发现问题了再完善本贴。先灰溜溜手工计时去吧…...原创 2022-08-17 17:43:29 · 264 阅读 · 1 评论 -
C++功能模块1:find_last_of()解析文件名
想要从一个路径加文件名的字符串里解析出文件名,可以利用c++标准库的string::find_last_of()函数:原创 2022-08-16 15:45:33 · 1215 阅读 · 0 评论 -
SDK封装:算法sdk封装的思路及细节总结
因为开发过程中,往往没有真实的部署环境,或者真实部署环境资源紧张,大家迫不得已要在自己的设备上开发。下面记录下,这种情况下算法开发和SDK方式封装的总体思路。原创 2022-07-25 16:26:08 · 5107 阅读 · 0 评论 -
C/C++:NULL和nullptr的区别
直接先上结论:如果要给void*指针初始化,直接使用nullptr。1、NULL首先,NULL是一个预处理变量,即宏定义。1)在C中,NULL就是(void*)0,即指向void类型的指针:#define NULL (void*)02)在C++中,NULL就是0:#define NULL 0可见:NULL在c和c++里代表的含义不一样!所以容易引起歧义。2、nullptr1)nullptr在c++11以后提出,不是预处理变量。2)nullptr不管在c还是c++,只代表(void*)0原创 2022-07-15 18:01:41 · 646 阅读 · 0 评论 -
SDK封装:查询某动态库的所有依赖库,并自动复制到某路径
我们在封装SDK时,封装后的动态库通常还需要其他的依赖库,这时候最直接的方法,就是通过ldd命令查询有哪些依赖库及对应地址,然后逐个拷贝至自己SDK的依赖库目录里。上述做法没有问题,但是效率较低,尤其是在工程较大、依赖较多时。因此,通过下面脚本,可以自动完成上述工作。具体的:1、在封装的动态库目录,新建脚本 copy.sh内容如下:DEP_LIST=$( ldd $1 | awk '{if (match($3,"/")){ print $3}}' )mkdir libcp -L -n ${D原创 2022-07-15 10:47:08 · 564 阅读 · 0 评论 -
静态库vs动态库,以及各自使用场景
以下以Windows上为例,概括静态库和动态库区别,以及使用场景。ubuntu上类似。1、静态链接库:静态链接库工程编译后,生成.lib文件。 在目的程序使用静态链接库的场合,直接将.lib文件中的全部函数链接到目的程序中。运行生成的目的程序的场合,不再需要.lib文件就可以直接运行。当静态链接库发生变化的场合,目的程序必须要重新编译,否则执行时静态链接库的内容没有更新。2、动态链接库:动态链接库工程编译后,生成.lib和.dll文件。 .dll文件是作为共享函数库的可执行文件。不同编程语言编原创 2022-07-14 11:39:00 · 1114 阅读 · 0 评论 -
void*指针与自定义类型指针之间转换的使用技巧
void*指针与自定义类型指针之间转换的使用技巧原创 2022-07-06 15:22:59 · 4442 阅读 · 0 评论 -
ubuntu系统CUDA NPP调用问题记录--undefined reference to `nppiResize_8u_C3R‘
ubuntu系统 CUDA NPP调用问题记录--undefined reference to `nppiResize_8u_C3R'原创 2022-06-28 09:49:04 · 804 阅读 · 1 评论 -
makefile编写问题记录--opencv调用、动态链接库/可执行文件生成、foreach等函数说明、条件判断关键字等
makefile详解、有示例、怎样调用opencv、生成so、生成可执行文件等等原创 2022-06-27 20:45:00 · 1781 阅读 · 0 评论 -
Ubuntu/CentOS:C++工程调用Boost库
一、系统安装boost库如果找不到库的话,可以先试一下二、自己工程里引用自己需要的头文件,例如thread类因为boost的好多接口实现,都直接写在.hpp文件里了。所以至此,直接编译自己工程就可以了,不用先链接boost的库。三、补充:假如编译时,提示类似以下错误,说找不到一些方法的实现:**这个时候,缺啥库再专门把相应库加入cmakelist里。**具体的,比如提示找不到boost::program_options::options_description::m_default_line_len原创 2022-06-13 22:00:00 · 700 阅读 · 0 评论 -
UUID: ubuntu/centos系统c++工程里使用uuid
ubuntu系统C++工程中生成uuid教程原创 2022-06-09 22:00:00 · 1720 阅读 · 0 评论 -
使用extern关键字实现全局变量的应用
使用extern关键字实现全局变量的应用原创 2022-06-09 19:45:00 · 187 阅读 · 0 评论 -
C++中list的使用方法及常用list操作总结
C++中list的使用方法及常用list操作总结转载 2022-06-08 22:00:00 · 2505 阅读 · 0 评论 -
C++读写json文件
C++读写JSON文件原创 2022-06-02 20:15:00 · 800 阅读 · 0 评论 -
ubuntu下使用vscode和cmake对c++代码进行debug调试
ubuntu下使用vscode和cmake对c++代码进行debug调试原创 2022-06-02 22:30:00 · 921 阅读 · 0 评论 -
c++创建对象的2种方法,以及其中的区别(堆、栈)
C++在创建对象的时候可以采用两种方式:(例如类名为Test) Test test 或者 Test* pTest = new Test()。转载 2022-06-02 09:37:40 · 1612 阅读 · 0 评论 -
ubuntu系统调用libfacedetection人脸检测算法-超级简单
ubuntu系统C++调用libfacedetection人脸检测算法-超级简单原创 2022-05-26 22:15:00 · 318 阅读 · 0 评论 -
CMakeList.txt怎样使用,套用模板
CMakeList.txt怎样使用,套用模板原创 2022-05-16 21:45:00 · 175 阅读 · 0 评论 -
ubuntu系统下,libtorch环境加载.pt模型失败,一直报c10::Error错误
ubuntu系统下,libtorch环境加载.pt模型失败,一直报c10::Error错误。原创 2022-05-16 11:08:48 · 2900 阅读 · 0 评论 -
报错:multiple definition of 和 first defined here
https://blog.csdn.net/weixin_38184741/article/details/852460841、就只有一处定义了全局变量,但还是报错,提示重复定义。2、检查.h头文件,已经避免重复包含了。解决方法:在.c程序中定义全局变量,在.h文件中使用extern 做外部声明,供其他文件调用。...转载 2021-09-03 18:04:17 · 1290 阅读 · 0 评论