![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++
idreaming689
提高自己的认知
展开
-
pointer-like classes 开放智能指针
template<class T>class shared_ptr{public: T& operator*() const { return *px; } T* operator->() const { return px; } shared_ptr(T* p): px(p) {}private: T * px; long* pn;}pointer-like classes 开放迭代器template<class T,class Ref, cl原创 2022-01-23 16:28:49 · 188 阅读 · 0 评论 -
linux调试gdb core
#SIGSEGV 11 /* Segmentation violation (ANSI). */ 建立CORE文件,段非法错误ulimit -c unlimited #使用生成core文件#向程序发送11,建立core文件,段非法错误ps -aux |grep youappkill -11 pid#core文件生成位置/var/lib/apport/coredump#调试core文件gdb yourapp /var/lib/apport/coredump/core.**原创 2021-12-29 14:19:59 · 637 阅读 · 0 评论 -
C++代码的编译流程
预处理→编译→汇编→链接预处理:预处理用于将所有的#include头文件以及宏定义替换成其真正的内容,预处理之后得到的仍然是文本文件,但文件体积会大很多。gcc的预处理是预处理器cpp来完成的,2.编译:这里的编译不是指程序从源文件到二进制程序的全部过程,而是指将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程。汇编:汇编过程将上一步的汇编代码转换成机器码(machine code),这一步产生的文件叫做目标文件,是二进制格式链接:链接过程将多个目标文件以及所需的原创 2021-11-30 15:41:02 · 359 阅读 · 0 评论 -
linux平台交叉编译arm64库
1.构建工程时指定工具链cmake -DCMAKE_TOOLCHAIN_FILE=/home/…/gnu_arm64.cmake2.CMAKE_TOOLCHAIN_FILE 交叉编译文件#工具链文件 gnu_arm64.cmakeset( CMAKE_SYSTEM_NAME Linux )set( CMAKE_SYSTEM_PROCESSOR arm )SET(CMAKE_SHARED_LIBRARY_PREFIX "lib")SET(CMAKE_SHARED_LIBRARY_SUFFIX原创 2021-11-30 15:28:44 · 1017 阅读 · 0 评论 -
C++ 仿函数 function-like classes
仿函数 class ShorterThan { public: explicit ShorterThan(int maxLength) : length(maxLength) {} bool operator() (const string& str) const { return str.length() < length; } private: const int len原创 2021-11-29 21:01:36 · 389 阅读 · 0 评论 -
转换函数(conversion function)c++
conversion functionclass Fraction{public: Fraction(int num,int den=1) :m_numerator(num),m_denominator(den) {} operator double() const {//可以转换为double return (double)(m_numerator / m_denominator) }private: double m_numerator;//分子 double m_denomi原创 2021-11-28 11:39:07 · 324 阅读 · 0 评论 -
C++ 类模板,函数模板,static,namespace
staticclass Account{public: static double m_rate;//类中声明 static void set_rate(const double &x) { m_rate=x; }};double Accoutn::m_rate=1.2;//类外定义int main(){ //调用静态函数的方式有两种 Account::set_rate(5);//通过class name调用 Account a;//通过object调用 a.set_r原创 2021-11-21 15:54:04 · 470 阅读 · 0 评论 -
String C++
简单实现c++ 的stringclass String{public: String(const char* cstr=0); String(const String& str); String & operator =(const String &str); ~String(); char * get_c_str() const { return m_data; }private: char* m_data;}//ctorinline String::St原创 2021-11-21 15:05:02 · 330 阅读 · 0 评论 -
C++堆栈管理
Stack (栈) heap(堆)Stack,是存放在作用域(scope)的一块内存空间(memory space).例如当你调用函数,函数本身会形成一个stack用来放置接收到的参数,以及返回值.程序自动清理在函数本身(function body)内声明的任何变量,其所使用的内存块都取自上述stack.heap,或所谓system heap,是指由操作系统提供的一块global内存空间,程序可动态分配,(dynamic allocated),从而获得若干区块(blocks).static 静态对象原创 2021-11-21 11:37:26 · 542 阅读 · 0 评论 -
构造,拷贝构造,赋值构造函数C++
String Class#ifndef __MYSTRING__#define __MYSTRING__class String{public: //big tree 三个特殊的函数 String(const char* cstr=0);//构造函数 String(const String &str);//拷贝构造 String operator =(const String &str);//拷贝赋值 ~String();//析构函数 内存析构 离开作用域原创 2021-11-20 23:29:40 · 360 阅读 · 1 评论 -
C++操作符重载
操作符重载类的所有的成员函数隐藏this指针.reference:传递者无需知道接收者是以reference形式接受.//成员函数操作符重载inline complex& __doapl(complex *this,const complex&r){ return *this;}inline complex & complex::operator+=(const complex& r){ return _doapl(this,r);}C3+=C2原创 2021-11-20 20:36:27 · 398 阅读 · 0 评论 -
OpenSSL编译错误+CMake
编译调用出现错误# warning: gethostbyname is obsolescent, use getnameinfo() instead.# undefined reference to `getcontext'# undefined reference to `setcontext'# undefined reference to `makecontext'解决方案#cmake添加如下编译选择ADD_DEFINITIONS (-DOPENSSL_NO_ASYNC)ADD_DE原创 2021-10-18 10:26:46 · 694 阅读 · 0 评论 -
CMake调用boost库
CMake调用boost的编译脚本cmake_minimum_required(VERSION 3.14)project(boost_python)set(CMAKE_CXX_STANDARD 11)#指定boost根目录set(BOOST_ROOT E:/local/boost_1_61_0)#设置不适用系统的的boost的库set(BOOST_NO_SYSTEM_PATHS ON)#设置使用静态的boost库set(Boost_USE_STATIC_LIBS ON)#查找boost库原创 2021-09-28 13:48:15 · 2282 阅读 · 0 评论 -
CMake+VScode+C++目录结构设计
目录结构设计src -------------源文件存放文件夹3rdPart -------------第三方库存放目录bin-------------可执行文件生成目录build -------------中间文件目录doc -------------文档存放目录test -------------测试程序文件夹CMakeLists.txt-------------编写CMake...原创 2021-09-07 16:31:13 · 243 阅读 · 0 评论 -
数字转汉字大写
std::string numTobig(std::string strA){ std::vector<int> vA; std::string result; map<int, string> num_map; map<int, string> unit_map; num_map.insert(_pair(0, "零")); num_map.insert(_pair(1, "壹")); num_map.insert(_pair(2, "贰")); nu原创 2021-09-07 10:44:50 · 139 阅读 · 0 评论 -
C++提高运行效率的操作,性能优化
1.绑定CPU核.为了尽可能地降低多线程间的耦合性以提高速度,我们让不同CPU核心执行不同的线程.2.堆空间使用固定内存.全局堆内存的分配和释放非常慢而且是不确定的。你不能确定内存管理需要消耗多长时间。降低由堆内存碎片(对于执行关键操作的系统尤为重要)造成的内存分配失败的可能性.3.去除冗余计算,提前计算.4.位运算代替乘法和除法操作.5.打开编译优化 ....原创 2021-08-19 14:37:12 · 1637 阅读 · 0 评论 -
c++单例模式
单例模式#include <iostream>class Singleton{public: ~Singleton(){ std::cout<<"destructor called!"<<std::endl; } static Singleton& get_instance(){ static Singleton instance; return instance; }pri转载 2021-08-19 11:34:42 · 62 阅读 · 0 评论 -
Linux通过vidpid找到摄像头对应的索引
准备条件安装udev: sudo apt-get install libudev-dev项目引入头文件:#include <libudev.h>项目添加:cmake添加udev库 libudev.so代码实现//get vidpid->index int GetCameraId(int &id,std::string vid,std::string pid){ struct udev *udev = NULL; struct udev_enumer原创 2021-08-19 11:19:22 · 1241 阅读 · 4 评论 -
c++11泛型编程多参数
1,泛型编程多参数情况的处理template <class T, typename... Args>int load_model(T* &member,Args... args) { member = new T(); auto code = member->load("参数", args...); if(M_OK != code) { throw std::string("SDK load error"); } else {原创 2021-08-13 14:27:18 · 516 阅读 · 0 评论 -
vs编译的程序依赖运行时的问题解决
Visual Studio编译出的应用程序会依赖一些与vs版本相关的动态库,需要安装运行时,系统才能正常运行.需要修改项目的配置属性:为 /MT,如上图所示.原创 2021-07-28 15:31:55 · 305 阅读 · 0 评论 -
MFC或OCX添加自定义消息映射
背景//在编写OCX控件时,在线程中直接调用FireEvent相关的函数,js页面无法正常响应,//只能通过自定义消息映射,通过PostMessage发送消息,界面才能正常收到响应.FireEvent(eventidTakepicEvent, EVENT_PARAM(VTS_I4), lResult);PostMessage(WM_YOUR_EVENT, WPARAM, LPARAM);实现xxxxxCtrl.hprotected: afx_msg LRESULT onResult(WPA原创 2021-07-22 11:03:56 · 343 阅读 · 0 评论 -
算法与数据结构-链表LeetCode
链表操作1,链表逆序-a leetcode 206整个链表进行逆序#include<stdio.h>struct ListNode{ int val; ListNode *next; ListNode(int x):val(x),next(NULL){}};class Solution{public: ListNode* reverseList(ListNode*head){ ListNode *new_head=NULL;//指向新链表的头节点的指针 while(原创 2021-07-19 10:33:26 · 116 阅读 · 3 评论 -
opencv图像画圆
将人脸框的矩形改为void drawEllipse(cv::Mat &display, const Rect &faceRect, const cv::Scalar &color, int debounce, float cw, float acw) { static auto origin = faceRect; if(std::abs(origin.left - faceRect.left) > debounce || std::abs(origin原创 2021-07-16 18:24:42 · 517 阅读 · 1 评论 -
windows动态加载dll库
loadLib.h#include<map>#include<Windows.h>#include<functional>#include<memory>#include<iostream>namespace kaa {class LibWrap {public: LibWrap (); ~LibWrap (); unsigned long load(std::string file); template<typen原创 2021-07-16 15:22:47 · 578 阅读 · 0 评论 -
swig工具的使用
背景C++编写的DLL,C#工程使用命令命令:swig -c++ -csharp swigConfig.i原创 2021-05-28 14:15:48 · 663 阅读 · 0 评论 -
C++的ofstream写文件,文件保存CSV格式
#include<fstream>//头文件td::string csvPath=szDir + "\\output.csv";std::ofstream csvfile;csvfile.open(csvPath, std::ios::out);if (!csvfile){ //文件打开失败 return;}//csv文件输出csvfile <<"image name" << ","<<"属性1"<<","<&l.原创 2021-04-06 13:27:35 · 1892 阅读 · 1 评论 -
函数返回值与左值关系,函数返回值能否做左值?C++
C++语言的函数返回值类型分为两类:内部类型 自定义数据类型左值:可以放到赋值运算符的左边,能对表达式取地址、或具名对象/变量。一般指表达式结束后依然存在的持久对象。右值:赋值运算符的右边,不能对表达式取地址,或匿名对象。一般指表达式结束就不再存在的临时对象。内部类型:如果函数返回内部类型,并且希望返回值可以作为左值(即可以放在赋值操作符左边的),那就必须返回引用类型。自定义数据类型: 而在函数返回自定义类型(即返回类类型)中根据是否可作为左值,返回值是否可调用成员函数的不..原创 2021-04-02 18:10:59 · 2428 阅读 · 0 评论 -
图像缩放显示导致屏幕花屏
cv::Mat src=cv::imread("....."); CRect rect; GetDlgItem(IDC_STATIC)->GetClientRect(&rect); // 获取图片控件矩形框 cv::Size dsize = cv::Size(rect.Width(), rect.Height()); cv::Mat img = cv::Mat(dsize, CV_8UC3); cv::resize(src, img, dsize); // 转换...原创 2021-01-25 10:53:48 · 520 阅读 · 0 评论 -
画面上写汉字opencv
目前opencv无法往画面上写汉字,代码是网上查的记录一下.void GetStringSize(HDC hDC, const char* str, int* w, int* h){ SIZE size; GetTextExtentPoint32A(hDC, str, strlen(str), &size); if (w != 0) *w = size.cx; if (h != 0) *h = size.cy;}void paDrawString(cv::Mat& d.原创 2021-01-11 16:56:50 · 86 阅读 · 0 评论 -
spdlog使用以及头文件
spdlog通用头文件格式#pragma once#include <memory>#include <cstdio>#include <string>#include "spdlog/spdlog.h"#include "spdlog/sinks/basic_file_sink.h"#include "spdlog/sinks/rotating_file_sink.h"#ifdef WIN32#include <Windows.h>#原创 2020-12-10 10:17:21 · 1367 阅读 · 0 评论 -
C++异常处理(try和catch)
我们通常希望自己编写的程序能够在异常的情况下也能作出相应的处理,而不至于程序莫名其妙地中断或者中止运行了。在设计程序时应充分考虑各种异常情况,并加以处理。在C++中,一个函数能够检测出异常并且将异常返回,这种机制称为抛出异常。当抛出异常后,函数调用者捕获到该异常,并对该异常进行处理,我们称之为异常捕获。C++新增throw关键字用于抛出异常,新增catch关键字用于捕获异常,新增try关键...转载 2019-05-08 14:42:36 · 265 阅读 · 0 评论 -
提高程序运行效率的10个简单方法
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。注:以C/C++程序为例一、尽量减少值传递,多用引...转载 2019-04-26 18:32:38 · 2995 阅读 · 0 评论