C-C++
文章平均质量分 63
Corline
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
并查集结构
将两个元素所在集合合并以及判断两个元素是否属于同一个集合。并查集就是一个用于解决这类问题的一种数据结构。原创 2022-10-05 22:21:39 · 612 阅读 · 1 评论 -
TrieTree结构
TrieTree 又称为前缀树、字典树,是一种用于字符串处理的结构。给定一个字符串集合(字典),提供下面所述的操作。原创 2022-09-25 22:33:46 · 604 阅读 · 0 评论 -
关于C++内存泄露的一点思考
怎么探查内存泄露?如果是大规模的内存泄露,直接通过系统资源探查命令就可以确认有内存泄露。但是如果只有少量的内存泄露,就不容易被发觉。整体来讲,内存泄漏是由于new/delete或者malloc/free的调用不匹配导致的。如果说我们能统计在整个程序运行生命周期中,malloc被调用调用次数和free被调用的次数的话我们就能大致分析是否存在内存泄露。如果是C++代码,通过new/delete来分配内存的话,可以在项目之初就引入智能指针来管理对象的创建和释放。对于现有的代码侦测,可以通过valgrind.原创 2022-02-15 17:18:44 · 457 阅读 · 0 评论 -
重学C++系列之函数指针
引子函数指针的一个最大的好处在于它可以像我们常用的变量一样在代码中进行传递。它的本质就是用一个变量去接收函数所在内存的地址。普通的函数调用void functionTest(){ std::cout << "Hello function!!!" <<std::endl;}int main(){ functionTest();}函数指针类型用auto关键字定义接收函数地址auto helloFuntion = &functionTest;原创 2021-03-28 00:18:07 · 158 阅读 · 0 评论 -
策略模式-Strategy Method(C++语言描述)
我们如何看待设计模式?设计模式需要站在时间轴上来看待,需要看到未来。如果一个系统是静态的,那我们也不需要设计模式,毕竟引入了某种设计模式之后,系统的复杂性以及可理解性就会大打折扣。策略模式在软件设计的过程中,某些对象使用的算法可能多种多样,经常会发生改变,如果将这些算法都硬编码到对象中,通过 if…else… 或者 switch…case… 来进行管理,将会使对象变得臃肿。策略模式要解决的问题就是如何在运行时根据需要透明地更改对象所使用的算法?将对象与算法解耦,从而避免上述问题。场景模拟例如我们原创 2020-05-12 14:08:48 · 358 阅读 · 0 评论 -
工厂设计模式-Factory Method(C++语言描述)
概述我们在谈设计模式的时候,需要结合具体的场景来谈。没有万能的设计模式可以适应每一个业务场景,我们只有结合实际业务场景,抓住场景中的「变」和「不变」的主体才能更好地运用设计模式来设计出优良的代码结构。工厂设计模式属于让我们灵活创建对象的模式。用于应对这样的场景:通过一个类,在不改变它的源码的情况下可以通过它暴露的接口构造出我们想要的对象。通过模拟一个小场景并逐步重构来理解工厂设计模式。需求...原创 2020-04-23 10:40:25 · 270 阅读 · 0 评论 -
数组元素去重
问题:去除数组中重复的元素。输入:2, 7, 3, 7, 2, 9, 9, 3输出:2, 7, 3, 9思路:1、利用数组准备一个额外空间的数组A,遍历输入数组中的元素,每个元素都去数组A中遍历,A中存在则不管,不存在就将该元素放入数组A。2、利用ADT利用语言自身所带的红黑底层结构的容器,如Java的TreeSet以及TreeMap,C++的unordered_set,se...原创 2019-11-28 21:05:03 · 896 阅读 · 0 评论 -
引用与指针小结
引用与指针小结1、引用在创建的时候就必须被初始化, 即引用到一个对象; 指针在定义的时候不必初始化, 可以在之后根据自己的需要初始化。2、没有空引用, 指针可以赋值为NULL, 而引用是不可以的,引用必须与合法的存储单元关联。3、引用一旦被初始化指向(绑定)某个对象后, 它就不可以再被改变指向另一个对象。 而指针在没有经过const修饰的时候, 是可以随时指向另一个对象的。int a = 0;i...原创 2018-05-20 09:17:09 · 427 阅读 · 0 评论 -
C++ const 关键字使用小结
const 作用在指针变量上, 有作用于指的针指向不能修改和作用于指针指向的变量不能修改的区别。如果关键字 const 出现在星号左边, 表示被指向的对象是常量; 如果 const 出现在星号右边, 表示指针本身是常量, 不能指向其他内存空间; 如果 const 出现在星号两边表示指向的对象和指针本身都是常量。int a = 0;int b = 1;const int* c = &a;...原创 2018-05-22 23:22:25 · 541 阅读 · 0 评论 -
Linux下librdkafka编译安装使用学习
Kafka分为服务端和客户端,服务端集群一般称为brokers,客户端分为生产者(producer)和消费者(consumer)。开发者通常用客户端从kafka生产消息或消费消息,不同的语言使用不同的客户端,具体信息参见这个页面:https://cwiki.apache.org/confluence/display/KAFKA/Clients我使用的是C++开发的客户端:librdk...原创 2018-11-30 14:24:30 · 7798 阅读 · 0 评论 -
对宏offsetof理解
#ifndef offsetof#define offsetof(TYPE, MEMBER) ((size_t)&((TYPE*)0)->MEMBER)#endifoffset这个宏有两个参数 TYPE 和 MEMBER ,这个宏求的是结构 TYPE 中 MEMBER 成员的偏移量。先理解最里面的部分:((TYPE*)0)->MEMBER这里将0地址转换为...原创 2019-03-25 23:27:48 · 334 阅读 · 0 评论 -
排序算法之选择排序
在初级排序算法中,冒泡和插入排序已经不被实际工程所采用了。而选择排序还是会有地方用的。选择排序,插入排序像整理扑克牌一样,牌一张张的来,每来一张,就要将它插入手里之前已经整理好的牌中。我们假定数组有 n 个元素。下标索引为 i。i 从 1 到 n - 1。假定数组 array 元素为:1, 4, 3, 90, 1, 2, 3我们采用升序,第一轮:i 的值取 1,array[i] = 4...原创 2019-04-16 19:25:02 · 281 阅读 · 0 评论 -
递归实例求数组元素最大值
在用递归求解问题的时候,边界条件重要,子过程的划分一样重要,子过程反映了求解问题思路。将数组求最大值的问题划分子过程,采用左右划分。即将一个数组左右 「切成」两半,求取左侧最大值及右侧最大值,再二者之间返回最大值即可,其中左侧与右侧再按此划分,直到不能再划,即「当前半边」只有一个数组元素了。例子实现 C++ 代码:#ifndef _MY_ALGORITHM_#define _MY_...原创 2019-06-06 13:59:52 · 1184 阅读 · 0 评论 -
进程间通信——管道
基于管道的进程间通信模型为了完成进程间通信,需要先建立管道。管道不属于进程的资源而是和套接字一样属于操作系统。两个进程通过操作系统提供的内存空间进行通信。创建管道的API:#include <unistd.h>//成功返回 0,失败返回 -1int pipe(int filedes[2]);接口参数为文件描述符组成的数组。filedes[0]管道出口,filedes[1...原创 2019-07-09 14:16:25 · 289 阅读 · 0 评论 -
Makefile基础学习(一)——从依赖到伪目标
一、初识Makefilemake是一种用于项目编译的应用程序,本质是一种脚本。而Makefile则是对make脚本的规则描述。仅仅是写脚本编译项目的话shell脚本也是可以做的,用make的原因在于,make可以解析源文件之间的依赖,根据依赖关系自动维护编译工作。执行宿主操作系统中的各种命令。Makefile是一个描述文件,定义一系列的规则来指定源文件之间的调用先后顺序。有自己特定的语法规则...原创 2019-08-07 19:18:25 · 861 阅读 · 0 评论 -
排序算法之选择排序与冒泡排序
冒泡排序 对于给定的一个数组, 欲将其升序排列。 下标 i 从后往前走,每次把 i 及其之前『最大』的元素『沉』到 i 位置。 第一次 遍历数组 0 到 n-1 位置, 将最大的一个元素捡出来, 与第 n - 1 位置元素交换, 第二次 遍历数组 0 到 n-2 位置, 与 n - 2 位置元素交换, 第三次... 直到把整个数组排完。class Sort{public:...原创 2018-05-10 22:50:22 · 237 阅读 · 0 评论 -
Qt模型视图(MV)小案例
需求在本地文件中读取学生分数信息,按照一定规则显示到界面中支持数据动态加载,即本地文件更改后,可以动态地在界面上显示......支持分数平均等小功能本案例采用MVC设计模式,采用四层架构,从下往上即数据层(Data Source)、数据表示层(Data Object)、数据组织层(Model)、数据显示层(View)系统架构图:核心类图:DataSource类设计:——设置数据源并读取数据——对数...原创 2018-04-06 17:08:48 · 1412 阅读 · 0 评论 -
基于QPainter的简易绘图板设计
——功能需求自由图形绘制基本图形绘制选择图形绘制颜色类似于Windows自带的绘图程序——界面解决方案以QWidget为基类创建绘图主窗口使用QGroupBox创建图形设置区域使用单选按钮QRadioButton实现目标图形的选择使用QComboBox实现绘图颜色的选择效果:问题分析:1、如何实现自由绘图?自由绘图的本质即跟踪鼠标的移动,所以必须考虑鼠标何时开始,何时结束,以及如何记录鼠标的移动。...原创 2018-04-01 21:02:34 · 544 阅读 · 0 评论 -
C++操作符重载
为什么需要对操作符重载?以及操作符重载的常见注意事项。原创 2017-03-02 21:52:30 · 401 阅读 · 0 评论 -
多态的现象及本质剖析(一)
深入分析C++多态的现象与本质。原创 2017-03-02 22:57:50 · 841 阅读 · 0 评论 -
字符串操作之strstr()函数实现
自己实现strstr()函数原创 2017-03-02 09:20:03 · 666 阅读 · 0 评论 -
继承(Inheritance)与复合(Composition)关系下的构造与析构
探究继承与复合关系下的构造与析构次序。原创 2017-04-24 21:43:16 · 553 阅读 · 0 评论 -
指针与内存管理初步
野指针及内存管理初步原创 2017-05-21 11:00:58 · 332 阅读 · 0 评论 -
重载new/delete自定义内存管理
new/delete是C++预定义的操作符。 new/delete行为: –new 1、获取足够大的内存空间(默认是堆空间) 2、调用类的构造函数创建对象 –delete 1、调用析构函数销毁对象 2、回收内存空间(默认为堆空间)原创 2017-10-31 22:56:21 · 541 阅读 · 0 评论 -
C&&C++的异常处理(一)
异常的概念--程序在运行过程中可能产生异常--异常(Exception)与错误(Bug)的区别异常是程序运行时可预料的程序执行分支Bug是程序中的错误,是不被预期的运行方式异常和Bug的对比: --异常运行时产生除0的情况需要打开的外部文件不存在 数组的越界访问 --Bug使用野指针堆数组使用后未释原创 2017-11-11 03:14:01 · 896 阅读 · 0 评论 -
C&&C++异常处理(二)
C++中内置了异常处理的语法元素try...catch... --try语句处理正常代码逻辑 --catch语句处理异常情况 --try语句中的异常由对应的catch语句处理try{ double r = divide(1, 0);}catch(...){ cout << "Divide Exception..." << e原创 2017-11-12 10:35:11 · 491 阅读 · 0 评论 -
C&&C++异常处理(三)
在C++中catch语句块也可以抛出异常为什么C++要支持catch语句块也可以抛出异常呢?catch语句块中可以将捕获到的异常重新解释后再抛出(在大型的软件系统中我们就可以对异常做统一的规范,便于软件的开发管理)在软件开发工程中,我们采用下面这样的方式统一异常【编程实验】C++中异常的重新解释#include #include u原创 2017-11-12 14:56:42 · 337 阅读 · 0 评论 -
线性表性质与操作
线性表(List)的表现形式:--零个或多个数据元素组成的集合--数据元素在位置排列上是有序的--数据元素的个数是有限的--数据类型必须相同线性表(List)的抽象定义:--线性表是具有相同类型的n(n >= 0)个数据元素的有限集合。--(a0, a1, a2, ... an-1)--其中ai是表项, n是线性表长度。线性表(List)的性质:原创 2017-11-01 23:41:03 · 576 阅读 · 0 评论 -
线性表的顺序存储操作
顺序存储表的定义:线性表的顺序存储结构指的是用一段地址连续的存储单元一次存储线性表中的数据元素。顺序存储结构线性表的设计:可以选择用一维数组来数显顺序存储结构--存储空间:T* array;--当前长度:int m_length;【代码示例】#ifndef SEQLIST_H#define SEQLIST_H#include "List.h"namesp原创 2017-11-17 22:31:11 · 238 阅读 · 0 评论 -
DynamicList动态顺序存储结构
DynamicList动态顺序存储结构设计与实现原创 2017-12-20 22:39:48 · 1037 阅读 · 0 评论 -
支持最小值的栈设计
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。原创 2017-12-22 13:30:06 · 270 阅读 · 0 评论 -
标准库容器里存的是引用还是实体对象?
以前没有认真思考过容器里存的到底是引用还是对象。因为存引用的话会减少调用拷贝构造带来的开销,但是那样的话就不能保存local object(局部对象)的引用,那样会给容器的使用范围带来很大的局限性。所以,容器里存的是实体对象。这是今天在写代码查一个bug的时候发现的。场景是代码从文件中读取数据,存到一个list中。在调用append后,发现值就发生了变化,字符串变成了空串,int变成了随机值。(以...原创 2018-03-18 17:44:00 · 1604 阅读 · 2 评论 -
拷贝构造函数应用场景分析
拷贝构造函数又叫复制构造函数,一般细分为四个应用场景。原创 2017-03-01 09:52:16 · 1298 阅读 · 0 评论
分享