自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 收藏
  • 关注

原创 数据结构和排序

数据分为逻辑结构:集合、线性结构(一一)、树形结构(一多)和图状结构(多多);物理结构顺序存储结构连续链式存储结构数据任意存储单元,通过保存地址方式找到关联数据元素队列的定义队列:一头压入,另一头弹出,先进先出栈:只能栈顶插入和删除,先进后出排序选择、冒泡、插入归并、快速、...

2020-07-06 16:16:19 192

原创 C++基础

malloc与new?malloc为C库函数,new为C++关键字malloc申请内存以字节为单位,不可同时初始化这片内存;new申请内存以类型为单位,并同时初始化内存对象的创建只能靠new,创建对象时,触发构造函数free与deletefree为C库函数,delete为C++关键字free为释放内存后,还得将指针赋值NULL,否则可能出现野指针delete直接销毁对象,触发析构函数...

2020-07-01 09:05:02 166

原创 exit耗时高

程序退出时,exit() 和 _exit() 的行为不同,导致耗时差异显著。exit() 会执行清理工作,如调用 atexit() 注册的清理函数、刷新文件缓冲区和关闭文件描述符,最终调用 _exit() 终止进程。这些额外操作使得 exit() 耗时较长。而 _exit() 直接终止进程,不执行任何清理工作,因此速度更快。实验结果显示,exit() 耗时 276 微秒,而 _exit() 仅耗时 182 微秒。在子进程中,通常推荐使用 _exit(),以避免重复清理父进程的资源。

2025-05-18 00:10:01 417

原创 printf耗时高的原因

耗时高背景:设备升级初始化失败。app拉起dsp并建立链接,有个超时机制是在app拉起dsp后15s内能成功建立链接表示通信成功,当前具体问题是app在15s内没有和dsp成功建立链接。排查过程:通过对初始化的过程增加耗时打印,发现每段耗时不高,但各个耗时加起来挺高的。初始化主要有信号捕捉,syslog日志初始化,基础服务client组件创建,业务组件(jpeg通道创建,link_server创建等)。接下来把不需要的代码全部注释掉,如信号捕捉,printf等,发现耗时很低。逐渐发现是printf耗

2025-05-17 22:02:48 219

原创 读写锁应用场景,适合读多写少

该代码展示了使用pthread读写锁(pthread_rwlock_t)实现多线程并发控制的场景,适用于读多写少的情况。代码分为两部分:缓存管理和全局配置管理。缓存管理通过cache_reader和cache_writer函数模拟高频读取和低频写入操作,而全局配置管理通过config_reader和config_writer函数实现类似功能。读写锁允许多个读线程并发访问资源,但在写操作时独占资源,确保数据一致性。代码还包含了线程的创建、等待和资源清理过程,展示了读写锁在多线程编程中的典型应用。

2025-05-17 11:48:52 128

原创 信号量的使用场景

这段代码通过信号量和多线程模拟了一个有3个车位、5辆车的停车场,保证同一时刻最多只有3辆车能进入停车场,其余车辆需等待,体现了信号量在并发资源访问控制中的典型应用。附带的ASCII图形直观展示了线程竞争、进入、离开和补位的过程。

2025-05-17 11:45:33 100

原创 图片缩放算法

int PicZoom(PT_PixelDatas ptOriginPic, PT_PixelDatas ptZoomPic){ unsigned long dwDstWidth = ptZoomPic->iWidth; unsigned long* pdwSrcXTable; unsigned long x; unsigned long y; unsigned long dwSrcY; unsigned char *pucDest; unsigned char *pucS

2020-08-03 16:59:09 228

原创 链接freetype和libjpeg库对文字和图片解码映射到LCD上显示

freetype为什么用,对矢量字体的搜索开源库的使用FontsInit()->FreeTypeInit()->FreeTypeFontInit()原理:freetype是字体搜索引擎,将文字编码和字库文件的字形一一对应。可对字体缩放和旋转。实现步骤:1初始化库2创建face object(字形和库的对应关系)3可加载字体缩放和旋转4通过编码值加载对应的字符点阵5最后通过把字符发写入lcd映射地址上static int FreeTypeFontInit(char *pcF

2020-08-03 16:49:48 233

原创 数码相框总结

三总输入模式比较int GetInputEvent(PT_InputEvent ptInputEvent){ /* 把链表中的InputOpr的GetInputEvent都调用一次,一旦有数据即返回 */ PT_InputOpr ptTmp = g_ptInputOprHead; while (ptTmp) { if (0 == ptTmp->GetInputEvent(ptInputEvent)) { return 0; } ptTmp = ptTmp-&gt

2020-08-03 16:00:42 222

原创 技术面 C++

技术面自我介绍介绍简历中的某一个项目计算机网络有几层(传输层有哪些协议)TCP/UDP区别TCP三次握手协议过程数组和链表区别重写和重载的概念C++多态的机制给一个集合,集合中有0-9共10个数,有多少个子集链表中在某个位置中插入一个节点,如何插入线程和多线程的区别代码中常用的数据结构有哪些报文中前几个字节包含什么HR面自我介绍目前面试几个公司了,说下公司名字用几个词语形容你的性格对待加班的看法如何释放压力项目合作中如何合作项目合作中遇到的困难是什么如果项目组成员

2020-08-01 09:15:33 203

原创 堆排序

#include "stdafx.h"#include <iostream>#include <string>#include <vector>using namespace std;/* 荷兰国旗快排*/class Sort{public: int* Partition(int arr[], int L, int R) { int less = L - 1; int more = R; int cur = L; whil..

2020-07-13 17:33:37 97

原创 荷兰国旗快排

#include "stdafx.h"#include <iostream>#include <string>#include <vector>using namespace std;/* 荷兰国旗快排*/class Sort{public: int* Partition(int arr[], int L, int R) { int less = L - 1; int more = R; int cur = L; whil..

2020-07-13 16:23:47 189

原创 递归模型和边界

#include <cstdlib>#include <iostream>#include <vector>#include <deque> using namespace std;#if 1class Test{public: int FMath(int n) { if(n == 1) return 1; else if(n == 2)

2020-07-09 15:56:54 332

原创 哈希表

哈希表关键值与存储位置通过哈希函数一一对应。定义:根据设定的哈希函数及处理冲突的方法将查找表中各数据元素存储在一段有限的连续空间中,即得哈希表构造哈希函数直接定址法数字分析法- 3平方取中4折叠法...

2020-07-02 10:53:25 131

原创 空间换时间

/* 问题: 在一个由自然数1-1000中某些数字所组成的数组中,每个数字可能出现零次或者多次。 设计一个算法,找出出现次数最多的数字。*/#include <iostream>using namespace std;void search(int a[], int len) // O(n){ int sp[1000] = {0}; int max = 0; for(int i=0; i<len; i++)

2020-07-01 15:23:56 111

原创 数据

逻辑结构:集合、线性结构(一一)、树形结构(一多)和图状结构(多多);物理结构顺序存储结构连续链式存储结构数据任意存储单元,通过保存地址方式找到关联数据元素

2020-07-01 14:50:53 94

原创 经典问题分析五 变量是不是指针 构造析构函数抛出异常

经典问题分析五编程判断一个变量是不是指针?C++支持C语言中的可变参数C++编程匹配调用优先级1.重载函数2.函数模板3.变参函数#include <iostream>#include <string>using namespace std;class Test{public: Test() { } virtual ~Test() { }};template< typename T >char IsPtr(T* v)

2020-06-29 19:56:52 113

原创 C++中的类型识别

基类指针指向子类对象基类引用成为子类对象的别名静态类型 - 变量(对象)自身的类型动态类型-指针(引用)所指向对象的实际类型解决 -利用多态1.基类中定义虚函数返回具体类型信息2.所有派生类都必须实现类型相关的虚函数3.没个类的类型虚函数都需要不同的实现示例1#include <iostream>#include <string>using namespace std;//fulei jileiclass Base{public: virt

2020-06-29 11:44:56 281

原创 C++异常处理下

catch语句块可以抛出异常catch中捕获异常可以被重新解释后抛出为了统一异常类型示例#include <iostream>#include <string>using namespace std;void Demo(){ try { try { throw 0; } catch(int i) { cout << "catch(int i)" << endl; throw i; }

2020-06-29 10:46:05 152

原创 C++异常处理

try catch(捕捉异常)try 正常代码catch处理(try语句的)异常情况thow抛出异常C++异常处理throw抛出异常必须catch处理当前函数能处理异常,继续否则,函数停止 执行,并返回异常,无返回值未被处理的异常会顺着函数调用栈向上传播直到被处理为止,否则程序停止执行示例#include <iostream>#include <string>#include <csetjmp>using namespace

2020-06-29 08:57:50 147

原创 C语言异常处理

C异常处理#include <iostream>#include <string>using namespace std;double divide(double a, double b, int* valid){ const double delta = 0.000000000000001; double ret = 0; if( !((-delta < b) && (b < delta)) ) ...

2020-06-28 21:36:59 192

原创 单例类模板

单例类模板如何定义一个类,使得这个类最多创建一个对象要控制对象数目,必须对外影藏构造函数思路:将构造函数的访问属性设置为private定义instance 并初始化为NULL当需要使用对象时,访问instance的值空值:创建对象,并用instance标记非空值:返回instance标记的对象#include <iostream>#include <string>using namespace std;class SObject{ st

2020-06-28 21:08:20 179

原创 智能指针类模板

智能指针类模板最重要类模板之一自动内存管理的主要手段能在很大程度上避开内存相关的问题STL中的智能指针auto_ptr声明周期结束时,销毁指向的内存空间不能指向堆数组,只能指向堆对象(变量)一片堆空间只属于一个智能指针对象多个智能指针对象不能指向同一片堆空间(避免多次释放同一指针)#include <iostream>#include <string>#include <memory>using namespace std;class

2020-06-28 20:17:42 486

原创 数组类模板

模板参数可以是数值型参数(非类型参数)数值型模板参数的限制变量、浮点数、类对象不能作为模板参数本质:模板参数是在编译阶段被处理的单元,因此,在编译阶段必须准确无误的唯一确定1+2+3+ … +N的值?数值型模板参数#include <iostream>#include <string>using namespace std;template < typename T, int N>void func(){ T a[N] = {0};

2020-06-28 19:01:41 382

原创 类模板深度分析 多参数 重定义 特化

类模板可以定义任意多个不同类型的参数类模板可以被特化指定类模板的特定实现部分类型参数必须显示指定根据数据结构参数分开实现类模板类模板的特化类型部分特化 – 用特定规则约束类型参数完全特化–完全特化显示指定类型参数#include <iostream>#include <string>using namespace std;template<typename T1, typename T2 >class Test{public

2020-06-28 15:20:55 383

原创 类模板的概念和意义

类模板存储和组织数据元素类数据组织的方式和数据元素的具体类型无关如:数组类,链表类,Stack类,队列类等规则类模板的应用只能定义具体类型,无法自动推导使用的具体类型定义对象声明泛指类型T可以出现杂类模板的任意地方编译器堆类模板的处理方式和函数模板相同从类模板通过具体类型产生不同的类在声明的地方对类模板代码本身进行编译在使用的地方对参数替换后的代码进行编译#include <iostream>#include <string>us

2020-06-28 14:27:29 2076

原创 深入理解函数模板

深入理解函数模板编译器从函数模板通过具体类型产生不同的函数编译器会对函数模板进行两次编译对模板代码进行编译(语法检查)对参数替换后的代码进行编译注意:函数模板本身不允许隐式类型转换自动推导时,必须沿河匹配显示类型指定时,能够进行隐式类型转换#include <iostream>#include <string>using namespace std;class Test{ Test(const Test&);public:

2020-06-28 11:26:03 216

原创 函数模板的概念和意义

C++交换变量定义宏代码块 vs 定义宏函数#include <iostream>#include <string>using namespace std;#define SWAP(t, a, b) \do \{ \ t c = a; \ a = b; \ b = c; \}while(0)void Swap(int& a, int&b){ int c = a; a =

2020-06-28 10:51:35 301 1

原创 经典问题四 之强制类型转换

继承中强制类型转换dynamic_cast是与继承相关的类型转换关键字dynamin_cast要求相关类中必须有虚函数用于直接或间接继承关系的指针(引用)之间指针转换成功:得到和目标相同的指针转换失败:空指针引用成:目标相同的引用败:异常信息编译器会检查dynaminc_cast的使用是否正确类型转化的结果只能在运行阶段才能得到#include <iostream>#include <string>using na

2020-06-28 10:05:30 146

原创 经典问题四 之构造、析构、虚函数

构造函数是否成为虚函数构造函数不可能成为虚函数在构造函数执行结束后,虚函数表指针才会被正确的初始化析构函数可以成为虚函数建议在设计类时将析构函数声明为虚函数#include <iostream>#include <string>using namespace std;class Base{public: Base() { cout << "Base()" << endl;

2020-06-28 09:51:30 116

原创 经典问题四 之new malloc delete free

new malloc 区别delete free 区别new malloc 区别new是C++关键字malloc是C库提供函数new以具体类型为单位进行内存分配malloc以字节为单位进行内存分配new在申请内存空间时可以进行初始化(触发构造函数)malloc仅跟需要申请定量的内存空间对象创建只能靠newmalloc不适合面向对象的开发#include <iostream>#include <string>#include <cstdlib&g.

2020-06-28 09:29:36 75

原创 多重继承 虚继承

多重继承一个类有多个父类子类拥有所有父类的成员变量和函数子类对象可以当做任意父类对象使用规则#include <iostream>#include <string>using namespace std;class BaseA{ int ma;public: BaseA(int a) { ma =a; } int getA() { return ma; }};class BaseB{ int mb;public: Bas

2020-06-27 21:20:43 217

原创 抽象类和接口

面向对象中的抽象类用于现实世界的抽象概念只能是定义类型,不能产生对象的类只能被继承并重写相关函数(没有必要创建对象)直接特征是相关函数没有完整的实现抽象类与纯虚函数C++语言没有抽象的概念C++通过纯虚函数实现抽象类C++虚函数只定义原型的成员函数一个C++类中存在纯虚函数就是味蕾抽象类纯虚函数语法规则class Shape{public:virtuial double area() = 0;};#include <iostream>#include &

2020-06-27 20:31:39 88

原创 类对象在内存布局、多态实现原理

class是一种特殊的struct在内存中class依旧可以看成是变量的集合class和struct遵循相同的内存对齐原则class的成员变量和成员函数是分开存放的每个对象有独立的成员变量,存栈、堆、全局数据区类所有对象共享类的成员函数,存代码段#include <iostream>#include <string>using namespace std;class A{ int i; int j; char c; double d;pub

2020-06-27 16:46:49 210

原创 多态_虚函数_重写

面向对象中期望的行为根据实际对象类型判断如何调用重写函数父类指针(引用)指向父类对象调用父类中定义的函数子类对象调用子类中定义的函数多态的概念根据实际对象类型决定调用函数的具体目标同样的语句在实际运行时有多种不同的表现形态C++ 关键字virtualvirtual 实现多态被virtual声明函数被重写后具有多态特性被virtual声明函数叫虚函数#include <iostream>#include <string>using na

2020-06-27 11:04:39 163

原创 同名覆盖引发的问题

父子间的赋值兼容子类是一种特殊的父类子类对象可以当做父类对象使用(兼容)子类对象可以直接赋值(或初始化)给父类对象父类指针可以直接指向子类对象父类引用可以直接引用子类对象#include <iostream>#include <string>using namespace std;class Parent{public: int mi; void add(int i) { mi = i; } void add(int a, int b)

2020-06-27 10:19:33 195

原创 父子间的冲突

父子间的冲突子类是否能定义父类的重名变量#include <iostream>#include <string>using namespace std;class Parent{public: int mi;};class Child : Parent{public: int mi;};int main(){ Child c; c.mi = 100; cout << c.mi << endl; r

2020-06-27 09:42:21 125

原创 继承当中的构造与析构

继承当中的构造与析构父子类的构造函数初始化父类成员子类构造函数初始化必须对继承而来的成员进行初始化初始化列表或赋值调用父类构造函数初始化默认调用无参构造函数或默认参数构造函数显示调用初始化列表所有父类构造函数子类构造函数初始化#include <iostream>#include <string>using namespace std;class Parent{public: Parent() { cou

2020-06-26 22:39:42 119

原创 不同的继承方式

继承父类为啥要修饰符public继承中的public 、protected、private三种继承方式public继承父类成员在子类中保持原有访问级别private继承父类成员在子类中变为私有成员protected继承父类中公有成员变成保护程艳,其他成员保持不变= MAX{继承方式,父类成员访问属性}C++ 默认为private#include <iostream>#include <string>using namespa

2020-06-26 21:41:12 119

原创 继承中的访问级别__建议自己实现

继承中的访问级别子类是否能直接访问父类的私有成员#include <iostream>#include <string>using namespace std;class Parent{private: int mv;public: Parent() { mv = 1000; } int value() { return mv; }};class Child : public Parent{public: void addVa

2020-06-26 20:52:24 91

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除