c/c++
文章平均质量分 92
玄道公子
玄道男标准宅男其他资料暂时不详
展开
-
bb_player开发笔记(一):libupnp在visual studio2019下的配置和编译
最近因为小米电视4升级一次之后,用优酷投屏就非常的卡顿,网络是OK的,网速也是快的,笔者通过在电脑上开启dlna的‘MDP’功能,使用手机或ipad (优酷)投屏,均能正常流产的播放,但坑爹的时候,小米电视的系统不能回滚降级。 于是乎笔者就准备自己写一个Android TV版的dlna 接收播放器,来接收优酷的投屏。于是乎就想到了,使用libupnp 加 FFmpeg(需要使用播放器功能)的方案来实现这个功能。暂时起名,bb_player, 也就是 宝宝 player(因为需求主要是想解决笔者家老婆大人优原创 2020-08-03 13:29:43 · 777 阅读 · 2 评论 -
gstreamer移植qnx(五):编写gstreamer插件audio sink和video sink
一、概述 因为gstreamer没有提供qnx系统的支持, 因此这里要实现音频和视频的播放,就必须自己实现最终的音视频输出的元件,即sink元件,一开始,我的想法是,可否移植开源的音视频输出库,比如sdl,alsa等等, 但是发现有些麻烦, 反而把事情弄的更复杂了。 最终还是踏踏实实的两个gstreamer的sink元件,用来输出音频和视频。 要编写gstreame...原创 2020-01-17 15:00:13 · 2503 阅读 · 0 评论 -
c印记(六): 数组与递归联合应用的小游戏
目录目录一概述二汉诺塔Hanoi Tower将汉诺塔变为算法问题化描述分析a 当n 1的时候b 当n 2的时候c 当n 3的时候d 当n N的时候实现三迷宫迷宫的表示方式手动版迷宫AI版迷宫一、概述前面分别讲述了数组和递归,他们在c语言程序设计与编程当中是非常有用的,出现的频率也比较高, 下面就用两个经典的小游戏(汉...原创 2016-04-27 21:00:47 · 2437 阅读 · 0 评论 -
c印记(十三):表驱动编程——优美的逻辑优化者
一、前言在《代码大全》中,专门用了一章(18章)的内容来讲解表驱动,并且在序言中推荐为初级程序员首读章节,可见其重要性。当然,表驱动也并不是什么“银弹”,只能说是一种不错的技巧。 有过编程经验的人可能或多或少的使用过表驱动,只是不清楚自己使用的某些编程技巧就是传说中的表驱动而已。接下来就来说说什么是表驱动,以及如何应用。二、表驱动2.1 什么是表驱动?在《代码大全》中,对表...原创 2017-05-15 23:33:32 · 3603 阅读 · 2 评论 -
奇妙的enum class,enum struct组合
1. 传说中的enum关键字不管是c语言,还是c++语言, 其中都有enum关键字。这是这两种语言的基础知识中都会涉及到的点。其具体定义方法如下:enum my_enum{ my_enum1 = 0, my_enum2,};当然也可以省略 enum的名字,使用匿名的方式定义枚举,如下所示:enum{ my_enum1 = 0, my_enum2,};或者与 ‘原创 2018-04-03 11:40:25 · 7661 阅读 · 0 评论 -
My Machine Learn(一): 线性回归
一、前言从上一次发的关于机器学习的文章到现在已经快一年了。 期间懈怠了很长一段时间,最近重新开启学习机器学习之路,准备一边学习,一边记录下这个过程, 所以就有了写 《My Machine Learn》系列文章的想法。当然所思缩写均是我自己的理解,不能保证完全正确,如果疏漏的地方,还请看官不灵赐教。 闲话少叙,言归正传。二、简介说道机器学习,深度学习之类的东西,大家首先想到的可能就是神经网路(或者说人原创 2018-04-27 13:35:22 · 543 阅读 · 0 评论 -
以c++的方式实现error类型的定义
一、背景以前大量使用c语言进行嵌入式软件开发的时候,对于错误类型比较常见的方式大概有:使用define的宏定义使用enum的枚举比如这里需要定义四个错误类型,成功,失败,严重错误,未定义错误。如果使用宏定义的方式来定义,形如:#define ERR_OK 0#define ERR_FAIL 1#define ERR_FATAL 2...原创 2018-06-05 17:02:38 · 6006 阅读 · 0 评论 -
引用模板类中定义的类型(用typedef或using)以及auto、decltype、typename的使用
一、背景使用typedef或者using定义类型别名是非常常见的手段,在c++里面,有时为了封装性,模块性等原因还会在某一个namespace或者class内部定义类型别名。最近在写c++代码的时候,有实现一个模板类,说实话,虽然用c++用了好多年了,但还真没花多少时间去研究模板,因为我始终觉得,做项目,开发软件,不是为了炫技,我也不认为会玩儿模板就是牛人大神了,最主要的是把握好三个“用”...原创 2018-06-15 13:46:40 · 3376 阅读 · 3 评论 -
My Machine Learn(三):c++实现矩阵运算
一、背景机器学习中的神经网络,有人说是模仿人类大脑的神经元,但说白了,其实就是算数运算,单个人工神经元或者神经元层,其权重与输出,均可以使用矩阵来表示。当然不管是c++还是Python均有矩阵运算的库(这其中Python的会更多一些),还有GPU加速等版本。这里我想实现一个c++版本,用以实现简单的全连接神经网络,起重点是简单,高效,不在乎要实现多复杂的功能。二、矩阵类定义这里...原创 2018-06-25 11:22:41 · 900 阅读 · 0 评论 -
c++使用function和bind绑定类成员函数时有重载函数怎么办?
一、背景最近在编写一个项目的代码时,不小心犯了一个错误, 导致项目代码编译不过,项目使用的语言是c++,一直报’bind(,xxxx)这类似的错误,开始以为是基础基类的方法有问题,但查看代码之后发现,我们要bind的成员函数,不是虚函数,也没有继承基类的函数,搞了好半天才发现问题所在。二、问题解决最终的问题,是因为此类中,内部使用(protected或private)的函数重载了我们需...原创 2018-07-23 09:15:38 · 5780 阅读 · 2 评论 -
My Machine Learn(四):mnist数字识别神经网络的优化(c++版本)
一、背景去年写过一篇关于用c++实现mnist手写数字识别的神经网络的文章,当然,这里是最基本的bp神经网络。不知不觉一年多的时间就悄悄溜过去了。《神经网络实现手写数字识别(MNIST)》:https://blog.csdn.net/xuanwolanxue/article/details/71565934《再谈神经网络反向传播原理》:https://blog.csdn.net/xua...原创 2018-08-07 13:30:04 · 5266 阅读 · 2 评论 -
《c印记》
这是我的第一本书籍,算是书籍吧,因为没有出版,只是整理收集了我自己关于c语言的理解,以及平常工作中使用到的c语言开发小技巧等等。 本着分享精神,在这里提供下载。这本书的内容包括了:一些数据结构,算法等的介绍,关于跨平台的一些技巧一些实用的小功能的实现面向对象思想插件化等等下载地址:1. 我自己尝试弄的一个个人博客(名为: 同好斋, 希望是有相同爱好的人的交流平台(当然现在还只是想法...原创 2019-02-18 15:42:24 · 379 阅读 · 0 评论 -
linux c/c++ 创建多级目录
有时候应用程序中,需要创建目录,但如果是多级目录,直接使用mkdir函数是没法实现的,需要循环调用mkdir函数, 这里就做一个记录,以便以后需要的时候,可以直接使用。#include <unistd.h>#include <sys/types.h> #include <sys/stat.h> #include <string>boo...原创 2019-04-28 15:15:53 · 5943 阅读 · 0 评论 -
c印记(四): 递归
目录目录前因概述例子总结1. 前因前几天闲来无事就在csdn学院上转了转,然后看了一下尹成的c语言视频教程,虽然是讲的是c语言基础 ,但是讲的过程中会时不时的讲一些c语言的知识点对应到实际应用中是什么情况的。感觉还可以,于是乎就瞄了几眼,主要是看了递归,数组以及劫持这几块东西。说实话,虽然工作也有五六年了,但感觉在工作的工程中并未用到什么很”牛X”的算法,...原创 2016-04-19 22:02:25 · 585 阅读 · 0 评论 -
c印记(五):数组
目录目录1 什么是数组2定义3 初始化访问以及遍历a 定义时初始化b 访问及遍历1、 什么是数组所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。在c语言中数组属于...原创 2016-04-22 21:03:29 · 455 阅读 · 0 评论 -
c印记(二):lw_oopc简介
目录目录1lw_oopc简介2lw_oopc 宏定义介绍1 基础宏部分11 CLASS12 CTOREND_CTOR13 DTOREND_DTOR14 FUNCTION_SETTING15 基础宏应用实例2 ABS_CLASS扩展21 概述22 例子3 INTERFACE扩展31 概述32 例子3总结1、lw_oopc简介在上一篇中简单的提了一下面向对象以及c语言实现原创 2016-01-28 14:58:09 · 3118 阅读 · 0 评论 -
c印记(三): my_oopc
目录目录1CLASS2CTORDTOR3CLASS_NEWCLASS_DELETE4OVERRIDE_FUNC_SETTINGIMPLEMENT_FUNC_SETTING5 完整的my_oopc头文件以及简单的使用例子6在my_oopc的基础上再次优化ver027总结上一篇介绍了lw_oopc v1.2当中的一些宏定义,以及如何使用这些宏定义,总体来说使用起来还是非常简单的。这一篇既原创 2016-02-02 13:50:00 · 863 阅读 · 0 评论 -
《API Design for C++》读书笔记(一):API 简介
目录目录1 什么是API2 API设计上有什么不同3 为什么使用API4 何时应当避免使用API好久没有认真的看一本书了,更别说看完一整本书。最近发现一般关于API设计的一本书《API Design for C++》还不错,应该是一本很有机会让我读完的书籍。虽然里面主要是以C++为蓝本来讲解API的设计,但其中关于API设计的一些最佳实践和设计是想都是值得借鉴的,不管是使用C++还是c,又原创 2016-02-01 16:36:05 · 867 阅读 · 0 评论 -
《API Design for C++》读书笔记(二):API特征
目录目录1问题域建模1 提供良好的抽象2 关键对象的建模2 隐藏实现细节1 物理隐藏 声明与定义2 逻辑隐藏封装3最小完备1 不要过度承诺2 谨慎添加虚函数3 便捷API4 易用性5 松耦合1 仅通过名字耦合2 降低类耦合3 可以的冗余4 管理器类5 回调观察者和通知稳定的文档详细且经过测试的API本章所讲的内容都是在回答下面这个问题:优质的API应该具有哪些原创 2016-02-16 16:46:16 · 763 阅读 · 0 评论 -
c印记(七): ini file解析
目录目录一、 写在前面的话二、 ini文件格式1. 简介2. 格式三、ini文件解析 API1. 声明基础数据类型2. API 声明四、ini 文件解析API实现1. ini文件解析:iniFileParseFile2. 行解析:iniFileParseLine3. 节(名)解析:iniFileParseSection4. 键-值 参数对解析:iniFil...原创 2016-10-16 14:09:50 · 1830 阅读 · 0 评论 -
c印记(八): ring buffer实现
一、写在前面的话之所以自己要自己实现一个ring buffer,和前面的ini file解析的原因差不多,都是在深度定制轮子。 我从事是多媒体播放或者录影方面工作,且是在嵌入式平台或移动端上运行,内存,cpu运行主频等资源都相对受限,所以模组之间的数据交互,就不能简单重复的使用malloc/free的方式,这样会产生内存碎片,而且有的模组(比如硬件解码或编码)的输入输出的buffer都需要物...原创 2017-01-16 21:46:07 · 2578 阅读 · 0 评论 -
c印记(十一): 单向链表 list原理与实现
注: 文中的定义,是指这样规定或者说就长这样,并非c语言当中的 定义和声明 本文所说,比较偏向于实用性,不是大而全的链表各种操作的实现 一、简而言之在百度百科里面摘取了一段关于链表的介绍: 链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成...原创 2017-03-31 10:32:58 · 1083 阅读 · 0 评论 -
c印记(十二):队列queue原理与实现
一、简而言之在百度百科里面摘取了一段关于队列(queue)的介绍: 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。二、一般而言这里是对就一般而言, 队列的结构,操作方法等的表述。2.1 结构以下为队列的结构示意图2.2 实现分类一般来说...原创 2017-03-31 14:58:50 · 4001 阅读 · 0 评论 -
c印记(九): 通用公共头文件
一、简介在笔者从事嵌入式软件开发的这六七年时间里,因为涉及到多块硬件平台以及多种系统平台(如 linux,android,windows,freeRTOS等)。还有gcc和visual studio以及keil等构建工具,这些对基本数据类型的定义,以及编译动态库时对接口导出方式等存在大小不一的差异,所以,为了方便进行跨平台middleware软件的开发,就定义了一下的三个通用公共头文件。...原创 2017-03-27 13:38:28 · 1800 阅读 · 1 评论 -
c印记(十): parcel(数据集,数据容器)实现
一、写在前面的话parcel是Android中的Framework层的一个数据结构,以c++实现,可以理解为数据集或者数据容器,在android将其作为函数的参数以及binder通信等,这里是仿照Android的parcel写的一个c语言版本的parcel,当然并不是完全将Android的parcel翻译成c语言,还会对其进行精简,将一些复杂的东西统统丢掉,只留下,数据容器操作相关的部分。以便以后在原创 2017-03-27 13:43:54 · 1690 阅读 · 3 评论 -
c印记(十四):跨平台线程封装
一、缘起不管是pc应用,服务端应用以及移动应用在编程过程当中几乎都会使用到线程相关的特性,而不同的操作系统可能会有不同的线程相关的API。比如类Unix系统上会有POSIX标准的pthread,windows上也有windows版的Pthread,但windows上并不是原生支持pthread,这样在使用的时候或多或少都会有一些性能,安全性上面的影响。再有就是一些rtos系统基本上都是task...原创 2017-05-29 23:27:54 · 1768 阅读 · 0 评论 -
神经网络实现手写数字识别(MNIST)
一、缘起原本想沿着 传统递归算法实现迷宫游戏 ——&amp;amp;amp;gt; 遗传算法实现迷宫游戏 ——&amp;amp;amp;gt; 神经网络实现迷宫游戏的思路,在本篇当中也写如何使用神经网络实现迷宫的,但是研究了一下, 感觉有些麻烦不太好弄,所以就选择了比较常见的方式,实现手写数字识别(所谓的MNIST)。二、人工神经网络简介从小至蚂蚁(没有查到具体数目,有的说蚂蚁大脑有25万个神经细胞,也有说是50万个),大至大象...原创 2017-05-10 18:20:42 · 48196 阅读 · 34 评论 -
c印记(一):面向对象
从2010年至今,工作已经五六年了,阅读过的博客文章,pdf,doc等文档不说不计其数,至少也很难计数了。但遗憾的是始终还未写过一篇博客(应该是懒病犯了O(∩_∩)O~)。这几年的工作期间有很多次都想写点什么,不管是作为笔记记录下来,还是仅仅当做练习打字都好,但基本上都被扼杀在脑海内的萌芽阶段。在网上也看到不少大牛都在说咱高技术的都应该写博客之类的言论,所以经过n+1此的挣扎之后,俺还是准备硬原创 2016-01-20 19:25:28 · 753 阅读 · 0 评论