C/C++语言
文章平均质量分 85
Zhang_P_Y
关注机器学习、计算机视觉、嵌入式(MCU、DSP、ARM)和桌面开发等领域
展开
-
【深度学习技术】如何用C++加载pytorch模型并进行推理部署
训练好的pytorch模型,不想再用C++把模型实现,而只想用C++进行模型部署,那么可以参考下面的文档:https://pengyizhang.github.io/2020/03/19/pytorch_script_cplusplus/Step 1: Converting Your PyTorch Model to Torch ScriptStep 2: Serializing Yo...原创 2020-03-19 08:54:38 · 1726 阅读 · 0 评论 -
【C/C++开发】C语言实现函数可变参数
函数原型: int printf(const char *format[,argument]...) 返 回 值: 成功则返回实际输出的字符数,失败返回-1. 函数说明: 在printf()函数中,format后面的参数个数不确定,且类型也不确定,这些参数都存放在栈内.调用printf()函数时,根据format里的格式("%d %f...")依次将栈里参数取出转载 2017-03-05 16:41:16 · 406 阅读 · 0 评论 -
【C/C++开发】TinyXml操作(含源码下载)
前言TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译,使用TinyXML进行C++ XML解析,使用简单,容易上手。这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树。 DOM模型即文档对象模型,是将整个文档分成多个元素(如书、章、节、段等),并利用树型结构表示这些元素之间的顺序关系转载 2017-05-11 12:59:53 · 568 阅读 · 0 评论 -
【C/C++开发】C++实现字符串替换的两种方法
替换字符串replace() erase()//C++ 第一种替换字符串的方法用replace()|C++ 第二种替换字符串的方法用erase()和insert()【 C++string|C++ replace()|C++ erase()|C++ insert()|C++自定义替换字符串函数】#includestring>#includeusing namespace std转载 2017-05-11 13:02:02 · 741 阅读 · 0 评论 -
【C/C++开发】STL erase()函数使用要小心
http://blog.sina.com.cn/s/blog_67b6b720010114d3.htmlerase()函数的功能是用来删除容器中的元素删除某个容器里的某个元素:c.erase(T);看似一个简单的动作,然而对不同类型的容器,内部却做了截然不同的事情,后面介绍。假设有这样一个题目,将某个容器中所有满足条件N == X的元素删除,按照常规的思路应该有类似这样的代码:转载 2017-06-09 22:26:40 · 793 阅读 · 0 评论 -
【OpenCV开发】OpenCV3后IPLimage转换成MAT的问题
IplImage* img1 = cvCreateImage(cvGetSize(resizeRes), IPL_DEPTH_8U, 1);//创建目标图像 Mat test = img1; 报错尝试常用的一些方法更改赋初始值仍报错(1)将IplImage类型转换到Mat类型Mat::Mat(const IplImage* img, bool copyData=转载 2017-06-22 13:30:10 · 1043 阅读 · 0 评论 -
【C/C++开发】多线程编程中的join函数
多线程编程中的join函数12345678910111213141516171819202122# coding: utf-8# 测试多线程中j转载 2017-06-12 20:03:06 · 7614 阅读 · 0 评论 -
【C/C++开发】C++静态库与动态库以及在Linux和Windows上的创建使用
原文出处: 吴秦的博客 这次分享的宗旨是——让大家学会创建与使用静态库、动态库,知道静态库与动态库的区别,知道使用的时候如何选择。这里不深入介绍静态库、动态库的底层格式,内存布局等,有兴趣的同学,推荐一本书《程序员的自我修养——链接、装载与库》。什么是库库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库转载 2017-06-13 07:58:38 · 1230 阅读 · 0 评论 -
【C/C++开发】C++编译指令#pragma pack的配对使用
C++编译指令#pragma pack的配对使用#pragma pack可以用来指定C++数据结构的成员变量的内存对齐数值(可选值为1,2,4,8,16)。本文主要是强调在你的头文件中使用pack指令要配对使用,以避免意外影响项目中其他源文件的结构成员的内存对齐。如果影响了其他源文件的结构成员内存对齐,那么在你按照默认对齐来计算那些结构成员占用内存大小或者使用指针移动计算结构成转载 2017-07-31 18:27:05 · 521 阅读 · 0 评论 -
【miscellaneous】【C/C++语言】UTF8与GBK字符编码之间的相互转换
UTF8与GBK字符编码之间的相互转换 C++ UTF8编码转换 CChineseCode一 预备知识1,字符:字符是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。“中”“国”这是两个汉字字符。字符仅仅代表一个符号,没有任何实际值的意义。2,字符集:字符集是转载 2017-08-11 15:07:57 · 1749 阅读 · 0 评论 -
【C/C++开发】malloc,calloc和realloc的区别和注意事项
(1)C语言跟内存分配方式从静态存储区域分配. 内存在程序编译的时候就已经分配好,这块内存在程序的整个运行期间都存在.例如全局变量、static变量.在栈上创建 在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放.栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限.从堆上分配,亦称动态转载 2017-03-05 16:38:09 · 2436 阅读 · 0 评论 -
【C/C++开发】值得学习的C语言开源项目
值得学习的C语言开源项目- 1. WebbenchWebbench是一个在Linux下使用的非常简单的网站压测工具。它使用fork()模拟多个客户端同时访问我们设定的URL,测试网站在压力下工作的性能,最多可以模拟3万个并发连接去测试网站的负载能力。Webbench使用C语言编写, 代码实在太简洁,源码加起来不到600行。下载链接:http://home.tiscali.c转载 2017-03-08 20:57:00 · 823 阅读 · 0 评论 -
【C/C++开发】C++库大全
C++特殊限定符(1)--static 当static来修饰类数据成员时,这个类的所有对象都可以访问它。因为值在内存中持续存在,它可以被对象有效共享。这意味着当一个对象改变static数据成员的值时,就改变了所有对象的这个数据成员的值。定义一个类:class NetComputer{private: static int number_l转载 2017-01-26 23:37:39 · 658 阅读 · 0 评论 -
【VS开发】【C++开发】const在函数前与函数后的区别
const在函数前与函数后的区别一 const基础 如果const关键字不涉及到指针,我们很好理解,下面是涉及到指针的情况: int b = 500; const int* a = &b; [1] int const *a = &b;转载 2017-01-22 14:58:16 · 369 阅读 · 0 评论 -
【C/C++开发】运算符重载
c++的一大特性就是重载(overload),通过重载可以把功能相似的几个函数合为一个,使得程序更加简洁、高效。在c++中不止函数可以重载,运算符也可以重载。由于一般数据类型间的运算符没有重载的必要,所以运算符重载主要是面向对象之间的。1.一般运算符重载在进行对象之间的运算时,程序会调用与运算符相对应的函数进行处理,所以运算符重载有两种方式:成员函数和友元函数。成员函数的形式比较简单,转载 2017-01-22 15:35:11 · 540 阅读 · 0 评论 -
【C/C++开发】运算符重载二
C++中预定义的运算符的操作对象只能是基本数据类型。但实际上,对于许多用户自定义类型(例如类),也需要类似的运算操作。这时就必须在C++中重新定义这些运算符,赋予已有运算符新的功能,使它能够用于特定类型执行特定的操作。运算符重载的实质是函数重载,它提供了C++的可扩展性,也是C++最吸引人的特性之一。 运算符重载是通过创建运算符函数实现的,运算符函数定义了重载的运算符将要进行的操作。运转载 2017-01-22 15:56:34 · 411 阅读 · 0 评论 -
【C/C++开发】C++实现简单的线程类
C++封装一个简单的线程类多线程编程简介: 大家在编程时,经常需要在程序中启动一个或多个线程来处理任务,而如果每次都是去调用系统创建线程的API函数来创建,代码量虽不多,但线程的创建和业务逻辑代码就揉在一起了,且创建多个线程的时候,有大量的重复代码,不便于维护。若我们把创建线程和销毁线程的这些共同的代码封装到一个类中,这样我们可以更专注业务逻辑的实现,在其它地方直接拿来用就行,程转载 2017-01-23 14:06:24 · 1741 阅读 · 0 评论 -
【C/C++开发】C++实现简单的线程池
C++实现简单的线程池线程池编程简介: 在我们的服务端的程序中运用了大量关于池的概念,线程池、连接池、内存池、对象池等等。使用池的概念后可以高效利用服务器端的资源,比如没有大量的线程在系统中进行上下文的切换,一个数据库连接池,也只需要维护一定里的连接,而不是占用很多数据库连接资源。同时它们也避免了一些耗时的操作,比如创建一个线程,申请一个数据库连接,而且可能就只使用那么一次,然后转载 2017-01-23 14:07:44 · 563 阅读 · 0 评论 -
【C/C++开发】C++ Thread对象封装
Pthread库是posix linux的线程库,调用接口如下,我们模仿JDK,对Thread进行封装,具体的业务逻辑只需要如同Thread一样实现run方法即可。线程操纵函数(简介起见,省略参数)pthread_create():创建一个线程pthread_exit():终止当前线程pthread_cancel():中断另外一个线程的运行pthread转载 2017-01-23 20:13:17 · 720 阅读 · 0 评论 -
【C/C++】缓冲区设计--环形队列
原文链接:http://blog.csdn.net/billow_zhang/article/details/4420789在程序的两个模块间进行通讯的时候,缓冲区成为一个经常使用的机制。 如上图,写入模块将信息写入缓冲区中,读出模块将信息读出缓冲区。这样使得:将程序清晰地划分模块,建立良好的模块化架构,使得写入和读出成为高聚合,低耦合的模块。对于写入和读出的处理可转载 2017-01-23 20:14:53 · 1952 阅读 · 0 评论 -
【C/C++开发】C++队列缓存的实现
C++队列缓存的实现为什么使用队列缓存c++的队列缓存主要用于解决大数据量并发时的数据存储问题,可以将并发时的数据缓存到队列中,当数据量变小时再匀速写入硬盘中。引用queue队列在头文件中引用queue队列#include using namespace std;定义缓存结构体struct DataInfo{ char* pBuf;//缓转载 2017-01-23 20:15:41 · 5673 阅读 · 3 评论 -
【C/C++开发】ffplay中的FrameQueue的自我理解
最近在研究ffplay,以下是本人今天在研究FrameQueue的时候整理的笔记,如有错误还请有心人指出来~//这个队列是一个循环队列,windex是指其中的首元素,rindex是指其中的尾部元素.typedef struct FrameQueue { Frame queue[FRAME_QUEUE_SIZE ]; i转载 2017-01-23 20:20:26 · 1105 阅读 · 0 评论 -
【VS开发】【C++开发】正确使用auto_ptr智能指针
1, auto_ptr类auto_ptr是一个模板类,定义如下:template typename Type>class auto_ptr {...};它存储的是一个指向Type的指针。顾名思义,auto_ptr是一种智能指针,它包含一个动态分配内存的指针,并在它生命周期结束的时候,销毁包含的指针所指向的内存。 例1:转载 2017-01-22 14:45:41 · 877 阅读 · 0 评论 -
【VS开发】【C/C++开发】memcpy和memmove的区别
memcpy和memmove()都是C语言中的库函数,在头文件string.h中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count); 他们的作用是一样的,唯一的区转载 2017-07-28 15:24:52 · 429 阅读 · 0 评论 -
【C/C++开发】C++11:左值引用VS右值引用
左值引用VS右值引用左值引用对于一般的C++程序员再熟悉不过,但对于右值引用(C++0X新特性),就稍微有点不知所云左值VS右值在定义变量的时候,经常会用到左值和右值,比如:int a = 1;int b = a + 1;上面这段代码,a先作为左值,在作为右值。在作为右值的时候,是相当于(原理上等同,但不一定对)int转载 2017-09-15 15:54:18 · 397 阅读 · 0 评论 -
【VS开发】【C/C++开发】关于boost库的C++11导致的undefined符号问题
undefined reference to boost::program_options::options_description::m_default_line_length问题最终解决依靠的是如下的问题:Visual Studio 2015: 版本boost_1_61_0有问题,重新利用Visual C++ 2015 x64编译也没用;更新版本为boost_1_65_1后,利用x原创 2017-12-08 12:32:53 · 1272 阅读 · 0 评论 -
【C/C++开发】C++文件流关于seekg失效的问题
关于seekg失效的问题当file.eof()=1的时候seekg就不好用了,当file.eof()=0的时候seekg是好用的。也就是说当一个文件读到尾部以后,不能再用seekg来移动或者定位了。通过建立该文件新的对象能解决这个问题。如果只是输出的话可以用streambuf的rdbuf#include<fstream>#include<iostream>#includ...转载 2018-06-22 16:57:01 · 2703 阅读 · 0 评论 -
【C/C++开发】类对象作为返回值时析构的情况说明
class Person {public: string name;public: Person() { name = "ttf"; } ~Person(){ cout << this->name <<endl;; } Person &changeName();};Pe...转载 2018-06-25 16:28:47 · 3245 阅读 · 0 评论 -
【C/C++开发】调试printf, fprintf
标准C只支持可变参数的函数,意味着函数的参数是不固定的,例如printf()函数的原型为:int printf( const char *format [, argument]... );而在GNU C中,宏也可以接受可变数目的参数,例如:#define pr_debug(fmt,arg...) \printk(fmt,##arg)这里arg 表示其余的参数可以是零个或多个,这些参数以及参数之间的...转载 2018-06-26 09:24:16 · 2285 阅读 · 0 评论 -
【C/C++开发】C++ 析构函数以及 delete 和delete[]的整理
转自:http://hi.baidu.com/bystander1983/item/bf0b5c12b077cfec9913d651delete和delete[] 的区别:C++告诉我们在回收用 new 分配的单个对象的内存空间的时候用 delete,回收用 new[] 分配的一组对象的内存空间的时候用 delete[]。很多人注意到了这个问题,但是却不清楚为什么要这样做,不这样做行不行。关于 n...转载 2018-06-27 14:18:44 · 2785 阅读 · 0 评论 -
【C/C++开发】强制链接静态库所有符号(包括未被使用的)
C++程序在链接一个静态库时,如果该静态库里的某些方法没有任何地方调用到,最终这些没有被调用到的方法或变量将会被丢弃掉,不会被链接到目标程序中。这样做大大减小生成二进制文件的体积。但是,某些时候,即使静态库里的某些方法没有任何地方使用到,我们也希望将这些没有使用到的代码编译进最终的二进制文件中。为什么会有这样的需求?的确,存在这种需求的是少数情况,但是一旦你遇到下面的需求,就变得必须了。比如:动态...转载 2018-06-27 14:21:15 · 4216 阅读 · 0 评论 -
【C/C++开发】函数指针与回调函数
C++很多类库都喜欢用回调函数,MFC中的定时器,消息机制,hook机制等待,包括现在在研究的cocos2d-x中也有很多的回调函数。1.回调函数什么是回调函数呢?回调函数其实就是一个通过函数指针调用的函数!假如你把A函数的指针当作参数传给B函数,然后在B函数中通过A函数传进来的这个指针调用A函数,那么这就是回调机制。A函数就是回调函数,而通常情况下,A函数是系统在符合你设定条件的情况下会自动执行...转载 2018-07-03 19:25:30 · 2766 阅读 · 0 评论 -
【C/C++开发】函数使用结构体、结构体指针作为返回值分析
函数使用结构体、结构体指针作为返回值分析32位机,gcc编译器使用结构体作为返回值分析反汇编代码可知,当被调用的子函数返回值为结构体的时候,调用函数将分配一段空间用于存放返回的结构体(使用一个结构体变量接受返回值),并将这段空间的地址作为调用时的参数压栈。子程序不负责对要返回的结构体分配空间。最后返回eax中存放的是结构体空间(栈中)的地址。在子程序退出的时候,调用函数可以在自己的栈帧中访问到返回...转载 2018-07-04 10:11:36 · 5198 阅读 · 0 评论 -
【C/C++开发】C++ 可配置的类工厂
C++ 可配置的类工厂 项目中常用到工厂模式,工厂模式可以把创建对象的具体细节封装到Create函数中,减少重复代码,增强可读和可维护性。传统的工厂实现如下: 1 class Widget 2 { 3 public: 4 virtual int Init() 5 { 6 printf("Widget Init"); 7 r...转载 2018-08-25 15:47:30 · 538 阅读 · 0 评论 -
【VS开发】【C/C++开发】vs2015编译boost 64位
vs2015编译boost 64位---恢复内容开始---step 1: 打开Developer Command Prompt for VS2015命令行窗口step 2: 执行bootstrap.bat,产生bjam.exestep 3: 全部编译的命令行:bjam --toolset=msvc-14.0 --build-type=complete stage 部转载 2017-12-08 12:21:38 · 731 阅读 · 0 评论 -
【C/C++开发】c++ 工具库 (zz)
下面是收集的一些开发工具包,主要是C/C++方面的,涉及图形、图像、游戏、人工智能等各个方面,感觉是一个比较全的资源。供参考! 原文的出处:http://www.codemonsters.de/home/content.php?show=freelibraries //z 2015-07-30 15:24:34 L.154'30926 BG57IV3@XCL T3752479411.K.F转载 2017-10-13 10:49:17 · 1911 阅读 · 0 评论 -
【C/C++开发】C++之enum枚举量声明、定义、使用与枚举类详解与枚举类前置类型声明
众所周知,C/C++语言可以使用#define和const创建符号常量,而使用enum工具不仅能够创建符号常量,还能定义新的数据类型,但是必须按照一定的规则进行,下面我们一起看下enum的使用方法。步骤(一)——枚举量的声明和定义(1)首先,请看下面的语句:enum enumType {Monday, Tuesday, Wednesday, Thursday, Fr转载 2017-09-15 15:58:12 · 2263 阅读 · 0 评论 -
【C/C++开发】模板类
1、模板的概念我们已经学过重载(Overloading),对重载函数而言,C++的检查机制能通过函数参数的不同及所属类的不同。正确的调用重载函数。例如,为求两个数的最大值,我们定义MAX()函数需要对不同的数据类型分别定义不同重载(Overload)版本。//函数1.int max(int x,int y){ return(x>y)?x:y ; }//函数2.float转载 2017-09-15 16:00:04 · 477 阅读 · 0 评论 -
【C/C++开发】C++11的模板类型判断——std::is_same和std::decay
C++11的模板类型判断——std::is_same和std::decay问题提出:有一个模板函数,函数在处理int型和double型时需要进行特殊的处理,那么怎么在编译期知道传入的参数的数据类型是int型还是double型呢? 如:#include templatetypename TYPE>void typeCheck(TYPE data){ //do somet转载 2017-09-15 16:04:17 · 1150 阅读 · 0 评论 -
【C/C++开发】STL内嵌数据类型: value_type
使用stl库的时候一直对value_type这个东西理解的不是很好,可以说就是不理解。今天看了《STL源码剖析》才恍然大悟。这里稍作记录。每个STL中的类都有value_type这种东西,通俗的说value_type 就是stl容器盛装的数据的数据类型,例如:vector vec;vector::value_type x;上述两句代码,第一句是声明一个盛装数据类型是int的数据的v转载 2017-09-15 16:06:28 · 5641 阅读 · 0 评论