
c++
文章平均质量分 65
半岛铁盒.
如果遇到10年前的自己,你最想对他说什么
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
C++ 实现pcm 转wav
/ = 每秒字节数 : samples_per_sec * bits_per_sample / 8。// = 采样率 : 8000 | 6000 | 11025 | 16000。// = 每采样点字节数 : wBitsPerSample / 8。// = 量化比特数: 8 | 16。// = 通道数 : 1。//读取pcm 到内存。/* 默认wav音频头部数据 *///定义wav头,写入文件。/* wav音频头部格式 */原创 2023-02-28 14:49:38 · 1374 阅读 · 0 评论 -
C++ 的 std::promise 和 std::future
编写多线程应用时,无法避免的要进行线程间数据同步/通信。和是 C++ 进行单向数据传递的一种方式。是数据的输入端,是数据的输出端。转载 2023-02-01 11:28:59 · 753 阅读 · 2 评论 -
C++ 智能指针 : auto_ptr 、unique_ptr、 shared_ptr、 weak_ptr
1、智能指针设计初衷: 智能指针实际是类,超过类的作用域后,析构函数会自动回收资源,为程序员管理申请的堆内存,避免内存泄漏原创 2023-01-05 09:38:13 · 575 阅读 · 0 评论 -
C++单例模式 : 懒汉模式 与 饿汉模式
单例模式:只能有一个实例,有懒汉和饿汉区分,实现核心思想: 1.构造函数私有化 2.使用静态函数作为接口来获取类对象原创 2023-01-04 10:01:01 · 2705 阅读 · 2 评论 -
C++ 跨平台文件读写
还在使用linux 自带的系统函数 fread 、fwrite么?考虑一下使用C++ 的ifstream、ofstream 一套代码,多平台运行,解放需要使用宏定义做平台区分读写的麻烦。// 获取filestr对应buffer对象的指针。// 调用buffer对象方法获取文件大小。// 业务逻辑,可对内存数据自行进行修改。// 加载文件中数据到内存。//释放内存、关闭文件句柄。// 采用二进制方式打开。// 输出内存数据到文件。原创 2022-12-12 14:47:10 · 1283 阅读 · 0 评论 -
C++内存泄漏检测
valgrind --tool=memcheck --leak-check=full --log-file=reportlead ./ifly_audiocoding.out原创 2022-10-31 17:33:20 · 111 阅读 · 0 评论 -
跨平台宏定义
else# endif#else# else# endif#endif。原创 2022-08-17 11:01:33 · 809 阅读 · 0 评论 -
1、构造函数、析构函数可以写成虚函数么?
1、在多态当中,基类的方法被定义成 虚函数,才可以通过基类指针动态调用派生类的方法,同理当我们delete 基类指针,如果基类析构函数不是虚函数,就无法动态调用到派生类的析构函数,导致派生类的对象无法析构,造成内存泄漏。反之,基类析构函数被定义成 虚函数的时候,delete基类指针时,会先 析构派生类对象,再 析构基类对象。所以构造函数不能是虚函数。1、因为创建一个对象时要确定对象的类型,而虚函数是在运行时确定其类型的,而在构造一个对象时,由于对象还未创建成功,编译器无法知道对象的实际类型。...原创 2022-08-17 09:38:36 · 736 阅读 · 0 评论 -
node js 怎么调用c++ ?
在 NodeJS 中,和其他语言编写的代码通信主要有两种方案:在对这两种方式进行比较后,发现这两种方式各有优劣。首先,AddOn 技术比较通用,它可以使用 C++代码来拓展 Node 的行为,很多库都是使用这种方式来完成一些比较底层操作(比如和操作系统的一些通信)的。但是它写起来比较麻烦,要编写一个 C++项目,还要按照 NodeJS 的规范 export 相应的函数,而且每次安装的时候都需要进行编译(以适应本地 Node 的版本)。如果只是调用一个 DLL,那就还需要在项目里重新包装一遍 DLL 的接口。转载 2022-07-01 15:24:25 · 4015 阅读 · 1 评论 -
一级指针和二级指针的区别与应用
一级指针和二级指针的区别与应用原创 2021-06-04 14:13:15 · 3763 阅读 · 0 评论 -
string对象的内存释放
1.erase 函数只清空数据,不会释放数据所占用的内存2.想要人为释放string对象占用的内存可以使用c++11提供shrink_to_fit的:原创 2021-10-29 11:16:28 · 1934 阅读 · 0 评论 -
程序员推荐书单
开发入门 书名 豆瓣链接 页数 推荐理由 1 代码整洁之道 https://book.douban.com/subject/4199741/ 388 培养代码审美能力,教你如何写出好代码。 2 Effective C++ https://book.douban.com/subject/5387403/ 297 这套书是Scott Meyers大牛写的,译者侯捷也很牛,书名居然没有翻译。 还有.原创 2021-03-18 15:27:51 · 419 阅读 · 1 评论 -
线程与进程
总结:线程是进程中的实体,是系统分派和调度的基本单元,进程是系统分配资源的基本单单元,多线程本身不占用系统资源,只是共享和使用同一进程的地址空间和资源,所以开辟多线程的时候的开销要比多进程要小,它只需要建立线程的相关控制表和有关队列,无需开辟地址空间和所需资源,由于多线程工作在同一进程的地址空间,共享内存和数据资源,无需内核参与通讯,而多进程之间往往需要内核的参与,提供通讯机制和保护机制,cpu在...原创 2020-04-07 20:11:30 · 733 阅读 · 1 评论 -
内存管理
内存存储:栈区:局部变量 函数参数堆区:malloc ,calloc , new等动态分配的变量数据段:1. bss :未初始化的全局变量2. Data :static修饰的静态变量 初始化的全局变量3. 常量区:只能读的常量代码段:存放程序的执行代码堆栈的区别:1)空间大小:栈的内存空间是连续的,空间大小通常是系统预先规定...原创 2020-03-31 10:50:44 · 118 阅读 · 0 评论 -
多线程实现服务器与多个客户端通信,客户端之间相互不干扰
1,服务端创建ServerSocket绑定端口号,循环调用accept()方法2,客户端创建一个socket并请求和服务器端连接3,服务器端接受客户端请求,创建socket与该客户建立连接4,两个socket在一个单独的线程上通话5,服务器端继续等待新的连接也就是说当有一个新的客户端与服务端连接,就创建一个新的socket并在这个线程里面通信。 客户端主要代码:ch...原创 2018-07-17 09:06:56 · 4077 阅读 · 1 评论 -
引用和指针的异同
引用的使用:数据类型 & 变量名例: int &a异同:1.指针在定义时,可以不初始化,引用必须初始化2.指针变量指向的地址可以根据需要动态修改,引用只要和某个变量绑定后就不能修改3.指针的本身需要4个字节的内存存放地址,引用本身不用分配内存空间4.使用sizeof求指针的大小总为4,但求引用要看引用的源头,即引用的变量...原创 2018-07-17 16:32:23 · 157 阅读 · 0 评论 -
常量函数与常量对象的使用
常量函数形式:int fun(void) const;注意:const int fun(void) 不是常量函数,只是函数的返回值为常量#include <iostream>using namespace std;class DEMO{private: int a;public: DEMO(int a=0):a(a){} void show ...原创 2018-07-18 21:24:35 · 3562 阅读 · 1 评论 -
面向对象三大基本特性封装,继承,多态,五大基本原则
透切理解面向对象三大基本特性是理解面向对象五大基本原则的基础.三大特性是:封装,继承,多态 所谓封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特性。 简单的说,一个类就是一个封装了数据以及操作这些数据的代码的逻辑实体。在一个对象内部,某些代码或某些数据可以是私有的,...转载 2018-07-19 11:35:52 · 316 阅读 · 0 评论 -
个人对面向对象和面向过程,封装,继承,多态的理解
面向对象:把数据和方法捆绑到一起形成对象,在把一些对象的共有属性抽象成类,当我们遇到具体问题,需要实现某种功能时,只需要把能实现功能的类实例化为对象,有时一个类的功能无法满足,就需要用到继承,继承是一个类的对象获得另一个类对象功能的方法,因为数据和方法被封装在类里,只对类可信的对象可见,大大增加了代码的安全性,一个大的项目需要很多人分块完成,如果不用这种思维和方法去处理,很容易导致数据和方法的冲突...原创 2018-07-30 09:42:19 · 464 阅读 · 0 评论 -
不带头结点的链表逆序,链表可以存放任意数据类型
#include <iostream>#include <stdlib.h>using namespace std;template <typename T> //类模板,链表可以存放任意数据类型class linklist{private: typedef struct node { T data; ...原创 2018-07-27 21:18:38 · 306 阅读 · 0 评论 -
带头结点的链表逆序
#include <iostream>using namespace std;typedef struct listnode //结构体定义结点数据类型{ int date; struct listnode *next;}listnode;void Init(listnode **head){ listnode *p=new listnode...原创 2018-07-27 21:21:39 · 1318 阅读 · 0 评论 -
为什么链表的插入删除要用二级指针?
#include <iostream>using namespace std;typedef struct listnode{ int date; struct listnode *next;}listnode;void Init(listnode **head) //链表初始化{ listnode *p=new listnode; ...原创 2018-07-27 21:33:11 · 2230 阅读 · 3 评论 -
静态成员变量和静态函数
静态成员变量与静态成员函数一、静态成员变量类的静态成员变量是直接与类联系,属于类的成员而不是对象,供所有对象共享,存放于全局区,因而不计入类的内存计算。静态成员变量可以通过类直接访问。(1)静态成员变量的初始化静态成员不属于类的任何对象,所以并不是对象建立时被定义的,所以它不能由类的构造函数初始化,一般也不能在类内初始化。关键字static只出现类的内部。1、在类外定义...转载 2018-09-17 18:34:43 · 314 阅读 · 0 评论 -
算法容器迭代器
#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){ // vector 是一个数组模板类 vector<int> v; v.push_back(1); v.push_back(9);...原创 2019-09-08 23:14:08 · 173 阅读 · 0 评论 -
c++中vector的用法
1 、基本操作(1)头文件#include<vector>.(2)创建vector对象,vector<int> vec;(3)尾部插入数字:vec.push_back(a);(4)使用下标访问元素,cout<<vec[0]<<endl;记住下标是从0开始的。(5)使用迭代器访问元素.vector<int>::iterator it;for...原创 2018-06-15 21:27:04 · 183 阅读 · 0 评论