自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(90)
  • 资源 (39)
  • 问答 (1)
  • 收藏
  • 关注

原创 Python 搭建虚拟环境

Python 搭建虚拟环境

2022-10-16 14:37:40 1267 1

原创 Qt 环境搭建

QT 开发环境搭建。

2022-10-16 14:03:09 3991

原创 C++ 虚函数表原理和类的内存分布

C++ 虚函数表原理和类的内存分布

2022-08-02 11:35:45 1362 1

原创 C++ 重载重写覆盖的区别

C++ 重写覆盖重载

2022-07-28 23:43:49 468

原创 模板特例化和常用用法

C++ 模板类基本用法和 模板特例化介绍。

2022-07-24 18:34:23 619

原创 C++ 模拟实现vector

C++ 模拟实现vector

2022-06-21 21:53:51 550

原创 C++ 模板类型的原样转发和可变参数

C++ forward原样转发

2022-06-21 21:51:40 476

原创 C++ 模板类的友元和折叠规则

模板类折叠规则和友元类

2022-06-21 21:50:02 409

原创 C++ 类模板和函数模板

函数模板当我们想要定义一个可以支持泛型的函数时,就要采用函数模板的方式了。所谓泛型就是可以支持多种类型的操作,比如我们定义一个compare操作,他可以根据传递给他的参数类型动态调用对应的函数版本,实现多种类型的比较。template <typename T>int compare(const T &v1, const T &v2){ if (v1 < v2) return -1; if (v2 < v1) re

2022-04-30 18:38:49 544

原创 C++ 类的封装继承多态

C++ 特性C++ 三大特性,封装继承多态。我们先实现一个Quote作为基类class Quote{public: Quote() = default; Quote(const std::string &book, double sales_price) { price = sales_price; bookNo = book; } std::string isbn() const { retu

2022-04-28 22:16:16 2129

原创 C++ lambda和function

lambda表达式lambda表达式又称为匿名表达式,是C11提出的新语法。[]存储lambda表达式要捕获的值,()内的参数为形参,可供外部调用传值。lambda表达式可以直接调用 // 1 匿名调用 [](string name) { cout << "this is anonymous" << endl; cout << "hello " << name << endl; }("z

2022-04-11 22:31:01 2021

原创 C++ 运算符重载

C++ 运算符重载

2022-04-10 16:03:35 1058

原创 C++单例模式的几种实现

本文介绍C++单例模式的集中实现方式,以及利弊局部静态变量方式//通过静态成员变量实现单例//懒汉式class Single2{private: Single2() { } Single2(const Single2 &) = delete; Single2 &operator=(const Single2 &) = delete;public: static Single2 &GetInst() {

2022-03-20 16:47:21 5868 2

原创 二分查找升序序列

问题描述有一个连续的int数组,数组中的数据升序排序,数组中的数据不唯一,有重复数据,要求在数组中查找指定值为target的数据,返回target最小的下标,如果找到返回其最小的下标,如果没有找到,返回-1, 要求用 用二分查找的方式解决上述问题, 要求时间复杂度为Olog(n),空间复杂度为O(1)举例 数组nums = [0,1,1,3,3,4], 查找target为1的数据最小的下标则返回1。如果查找target为100,则返回-1解决思路用二分查找解决上述问题,用一个数组中间的数据和targ

2022-03-03 12:01:10 362

原创 C++ 面试常问问题(一)

这篇文章讲解C++ 面试常问的几个问题。本文通过demo讲解初始化列表,继承,字符串等常问问题。看下边这个例子初始化列表//基类class Base{public: Base() : m_nbase(0), m_nbase2(m_nbase + 100) {} Base(int n) : m_nbase(n), m_nbase2(m_nbase + 100) { cout << "this is Base construct " <<

2022-03-03 11:54:53 324

原创 C++ 右值引用与移动构造函数

右值与右值引用不能修改的值就是右值,右值一般为临时变量。常见的右值有字面常量值,返回右值的表达式。所谓右值引用就是必须绑定到右值的引用。我们通过&&来获得右值引用。右值引用有一个重要的性质——只能绑定到一个将要销毁的对象。因此,我们可以自由地将一个右值引用的资源“移动”到另一个对象中。void right_references(){ int i = 42; //r 为i的引用,左值引用 int &r = i; //rr 不可以引用左值i,

2022-03-01 15:21:12 667

原创 C++ allocator类使用示例

动态内存管理之前我们讲述过动态内存的开辟,可以通过new, malloc,以及alloc等方式,本文通过介绍alloc方式,构造一个StrVec类,这个类的功能类似于一个vector,实现字符串的管理,其中包含push一个字符串,动态扩容,析构,回收内存等操作。StrVec类实现细节StrVec类实现如下class StrVec{public: //无参构造函数 StrVec() : elements(nullptr), first_free(nullptr),

2022-02-10 11:04:11 801

原创 C++类的拷贝控制demo

拷贝控制有时候我们需要两个类对象互相关联,当其中一个对象修改后也要关联修改另一个,用这个例子说明拷贝控制的案例。我们有两个类,Message类表示信息类,Folder类表示文件夹类,Message类里有成员folders表示其所属于哪些文件夹。Folder类有成员messages表示其包含哪些messages,所以Folder和Message之间是互相包含,多对多的关系。同时我们要考虑Message类的拷贝,赋值,销毁等操作,如何同步处理其关联的Folder类。其关系图是这样的[外链图片转存失败,

2022-02-08 16:59:58 898

原创 C++ swap操作

swap操作我们常用的交换两个数据的操作是这样void swap_int(int &a, int &b){ int temp = a; a = b; b = temp;}主函数调用是这样的 int a = 100, b = 200; swap_int(a, b); cout << "a is " << a << endl; cout << "b is " << b

2022-01-28 17:33:57 1445

原创 C++ 拷贝控制和资源管理

拷贝控制前文我们介绍了HasPtr类的拷贝控制,实现了行为像值的类,所谓行为像值的类就是我们所说的深拷贝,将一个类对象拷贝给另一个类对象时,其所有的成员都作为副本在新的类对象创建一遍,如果是指针类型的成员,则将指针指向的空间的数据复制一份给新对象,这样两个对象所有的成员都不关联,实现了深拷贝,不会受彼此影响。比如之前的HasPtr的拷贝构造HasPtr::HasPtr(const HasPtr &hp){ cout << "this is copy construtor"

2022-01-27 17:21:50 995

原创 C++ 拷贝赋值和单例模式

拷贝构造函数一个类可以不定义拷贝构造函数,系统会默认提供一个拷贝构造函数,叫做合成拷贝构造函数。与默认构造函数不同的是,即使我们定义了其他构造函数,系统也会为我们生成合成拷贝构造函数。合成的拷贝构造函数会将其参数的成员逐个拷贝到正在创建的对象中。编译器从给定对象中依次将每个非static成员拷贝到正在创建的对象中。对类类型的成员,会使用其拷贝构造函数来拷贝;内置类型的成员则直接拷贝。为了方便举例,我们手动实现一个mystring类class mystring_{private: /* da

2022-01-26 16:56:42 807 3

原创 利用容器和指针实现文本查询程序

简介本篇利用之前介绍的智能指针,关联容器,顺序容器等知识,做一个文本查询程序。该程序读取文本中的内容,然后根据输入的单词,判断该单词出现多少次,出现在哪些行,每行的句子是什么。比如我们输入elment,输出如下element occurs 112 times(line 36) A set element contains only a key;(line 158) operator creates a new element(line 160) Regardless of whether the

2022-01-21 17:59:55 798

原创 C++ 动态数组

C++语言和标准库提供了两种一次分配一个对象数组的方法。C++语言定义了另一种new表达式语法,可以分配并初始化一个对象数组。标准库中包含一个名为allocator的类,允许我们将分配和初始化分离。使用allocator通常会提供更好的性能和更灵活的内存管理能力。new和数组为了让new分配一个对象数组,我们要在类型名之后跟一对方括号,在其中指明要分配的对象的数目。在下例中,new分配要求数量的对象并(假定分配成功后)返回指向第一个对象的指针:int get_size_new(){ ret

2022-01-21 14:13:06 17821

原创 智能指针 unique_ptr和weak_ptr

unique_ptrunique_ptr和shared_ptr不同,unique_ptr不允许所指向的内容被其他指针共享,所以unique_ptr是不允许拷贝构造和赋值的。void use_uniqueptr(){ //指向double类型的unique指针 unique_ptr<double> udptr; //一个指向int类型的unique指针 unique_ptr<int> uiptr(new int(42)); // uniqu

2022-01-19 17:02:08 766

原创 C++ 智能指针shared_ptr

指针C++提供了对指针操作的方法,当我们用new开辟指定类型的空间后,就生成了一个指针。void use_pointer(){ //开辟整形指针,指向一个值为5的元素 int *pint = new int(5); //开辟指向字符串的指针 string *pstr = new string("hello zack");}通过new + 类型构造的方式可以生成指针对象,但是开辟的指针对象所占用的空间在堆空间上。需要手动回收。可以通过delete 指针对象的方式

2022-01-18 17:36:10 1301

原创 C++ 关联容器

之前我们介绍过顺序容器,list, vector, queue等,这一篇介绍关联容器, C++关联容器主要有两大类,map和set。mapmap主要是用来管理key,value类型的结构的。void use_map(){ map<string, size_t> word_count; string word; while (cin >> word) { word_count[word]++; } for (co

2022-01-14 16:59:45 611

原创 求最长回文串的长度

最长回文串字符串abcbada最长的回文串为abcba,最长回文串保证首尾字符相同,并且去除首尾后的子串也是回文串,如bcb。根据这个规律,ab就不是回文串因为首尾不同。abcbada也不是回文串,因为即使首尾相同,其子串bcbad不是回文串,所以abcbada也不是回文串。动态规划可以通过动态规划解决字符串的最大回文串的长度问题,其根本思路是依次列举出长度为1~n的回文串,最后返回最大长度n即可。动态规划的思路在于找出推导公式:1 首尾元素不同,则不是回文串。2 首尾元素相同,且去除首尾

2022-01-12 15:44:48 1476

原创 C++ 迭代器分类

除了容器自定义的迭代器之外,标准库还提供了其他几种迭代器,包括插入迭代器,流迭代器,反向迭代器,移动迭代器。插入迭代器迭代器被绑定到一个容器上,可用来向容器插入元素。插入迭代器包括back_inserter, front_inserter, inserter三种。back_inserter绑定到容器后,对该迭代器赋值,就执行了类似于push_back的操作,前提是该容器要支持push_back。front_inserter绑定到容器后,对该迭代器赋值,就执行了类似于push_front的操作,前提

2022-01-11 15:57:02 509

原创 C++ 泛型算法定制操作

向算法传递函数默认情况下,泛型算法还实现了另外一个版本,就是接受一个额外的参数。比如sort函数,接受第三个参数,第三个参数是一个谓词。谓词就是一个可调用的表达式,其返回值结果是一个能用作条件的值。标准库算法所使用的谓词分为两类:一元谓词(unary predicate,意味着它们只接受单一参数)和二元谓词(binary predicate,意味着它们有两个参数)。接受谓词参数的算法对输入序列中的元素调用谓词。因此,元素类型必须能转换为谓词的参数类型。我们可以暂且将谓词理解为函数我们利用谓词

2022-01-10 17:34:47 468

原创 C++ 泛型算法

泛型算法泛型算法是STL库里面定义的一些算法,这些算法可以用一个接口操作各种数据类型,因此成为泛型算法。大多算法定义在头文件algorithm和numeric中。意思就是可以用一个接口操作各种类型的算法就是泛型算法。泛型算法分为两类,一类是只读算法,一类是修改原有容器的算法。只读算法包括find(查找),accumulate(累加)等。修改算法包括replace(替换),fill(填充)等。accumulate vector<int> nvec = {1, 2, 3, 4,

2022-01-07 17:07:44 590

原创 递归反转单链表

递归反转本文介绍递归反转单链表,和之前的循环遍历反转单链表方式略有不同,递归的方式要写出推到递归公式。并且在递归的同时修改指针的指向。先定义Node节点class Node{public: Node(int dt, Node *nt = nullptr) : data(dt), next(nt) {} Node() = default; int data; Node *next;};Node节点构成的链表如下图基本思路是实现recursive_rever

2022-01-07 17:05:14 1315

原创 C++ 容器类

常用容器C++ 常用的stl容器包括:1 vector 可变大小的数组,支持随机访问。在尾部之外位置插入或删除元素很慢。2 deque 双端队列,支持快速随机访问,在头尾位置插入删除速度很快。3 list 双向链表,支持双向访问,任何位置插入和删除都很快4 forward_list 单向链表,只支持单向访问,在列表任何位置插入和删除都很快5 array 固定大小数组,支持快速随机访问,不能添加和删除元素。6 string 与vector相似,专门用于处理字符串。基本用法stl容器可以存储

2022-01-06 14:52:25 3511

原创 C++ IO stream流

流的状态C++流包括istream, ostream,基于istream继承实现了istringstream和ifstream,基于ostream继承实现了ostringstream和ofstream。由于不能拷贝IO对象,因此我们也不能将形参或返回类型设置为流类型。进行IO操作的函数通常以引用方式传递和返回流。读写一个IO对象会改变其状态,因此传递和返回的引用不能是const的。IO库定义了一个与机器无关的iostate类型,它提供了表达流状态的完整功能。IO库定义了4个iostate类型的c

2021-12-31 14:57:36 908

原创 双链表实现LRU算法

链表所谓链表就是一个节点指向另一个节点的数据结构,像一条链子把每个节点连接起来。如果一个节点既指向了后面的节点,也指向了前面的节点,这些节点就构成了双向链表。我们先定义这个节点结构class NodeLRU{public: NodeLRU(int v) : val(v), prev(nullptr), next(nullptr) {} int val; NodeLRU *prev; NodeLRU *next;};val为节点的数据域表示节点存储的数值p

2021-12-30 15:12:39 1005

原创 C++ 类的静态成员

声明静态成员我们通过在成员的声明之前加上关键字static使得其与类关联在一起。和其他成员一样,静态成员可以是public的或private的。静态数据成员的类型可以是常量、引用、指针、类类型等。举个例子,我们定义一个类,用它表示银行的账户记录class Account{public: void calculate() { amount += amount * interestRate; } static double rate() {

2021-12-29 16:46:32 519

原创 C++ 构造函数

类成员初始化类成员的初始化可以通过构造函数的参数列表初始化,也可以在构造函数中赋值完成初始化Sales_data::Sales_data(const Sales_data &sa){ this->bookNo = sa.bookNo; this->revenue = sa.revenue; this->units_sold = sa.units_sold;}上面就是通过赋值完成了bookNo, revenue, units_sold等成员的初始

2021-12-29 11:43:54 244

原创 c++ 类的作用域

访问成员每个类都会定义它自己的作用域。在类的作用域之外,普通的数据和函数成员只能由对象、引用或者指针使用成员访问运算符来访问。对于类类型成员则使用作用域运算符访问 Screen::pos row = 3; Screen::pos col = 4; Screen screen(row, col, 'c'); screen.get(); Screen *psc = &screen; psc->get();类的外部定义成员函数时必须同时提供类名

2021-12-28 12:25:25 740

原创 C++类的访问控制

私有和公有一个类里有方法和成员变量,public关键字标识后,public下的方法和变量都变为公有函数。private关键字标识后,private关键字下的方法和成员变量都变为私有。默认情况下,如果不声明public,class中所有的方法和成员都是私有的。如果不声明private, struct中所有的方法和成员都是公有的。友元上一篇,我们将print,read等非Sales_data类的全局函数声明为Sales_data类的友元函数,所以print,read可以访问Sales_data类的私有成

2021-12-27 17:24:47 696

原创 C++ 类基础

类类就是对一类对象的抽象,比如鹦鹉,麻雀都是鸟,鸟就是类,而鹦鹉,麻雀等就是对象。我们期待实现一个Sales_data类,用来管理图书录入系统,通过录入Sales_data对象信息,达到统计销量和收入的目的。源码链接https://gitee.com/secondtonone1/cpplearn。如果我们实现Sales_data类,外部调用是这样的void dealSales(){ //保存当前求和结果的变量 Sales_data total; //读入第一笔交易 if

2021-12-26 14:05:59 257

原创 C++函数

函数一个典型的函数(function)定义包括以下部分:返回类型(return type)、函数名字、由0个或多个形参(parameter)组成的列表以及函数体。其中,形参以逗号隔开,形参的列表位于一对圆括号之内,如下就是一个函数的定义void funca(){ cout << "hello world!!!" << endl;}局部变量在C++语言中,名字有作用域,对象有生命周期(lifetime)。理解这两个概念非常重要。· 名字的作用域是程序文本的一部分

2021-12-26 14:05:17 644

epoll demo(LT和ET)

自己学习并改写的epoll代码,在Linux测试没问题,分别实现了epoll的LT模式和ET模式,初学者可以学一学

2016-04-10

自己研究的redis3.07注释版

自己研究redis底层框架,对理解的部分添加了一些注释,希望可以帮到学习的人,有问题可以加我微信公众号,留言。解压密码123456

2016-04-08

epoll demo 代码

自己总结和改写的epoll demo代码,可以编译运行,初学者可以参考下,有我自己的理解

2016-04-08

IOS 内付费代码(接受appstore的收据和确认结果)

ios 产品内付费代码示例,这次是包含接受appstore的reciept和反馈给appstore ,并确认结果。

2014-10-14

android拖动小球demo

android demo程序,直接可运行,实现了手指点击屏幕拖动小球,小球跟随移动功能。

2014-07-04

ios 应用内付费代买示例

ios 应用内付费代码示例,我在公司测试可行,可以收到appstore信息回复。内涵使用说明。采用object-c编写,调用时说明已更新。

2014-03-06

ios应用发布到appstore全部流程

自己亲手整理的ios 应用发布到appstore的全部流程,含有配图,清晰明了,学不会只能说你笨。

2014-03-06

InAppPurchase

苹果内付费调用函数的示例,简单易懂,基于ios xcode项目,仅仅为示例,不喜勿喷。

2014-02-18

COCOS2D-X 实现触屏拖动和惯性运动

用cocos2d-x实现的触屏拖动程序,包括手指滑动后松开的惯性运动,可以直接,cocos2d-x开发,C++写的

2014-01-08

用cocos2d-x C++开发的俄罗斯方块源码和apk

使用C++在cocos2d-x开发的俄罗斯方块,内含源码,可运行,并且已经生成android发布包,运行流畅,喜欢的可以下载学习。

2013-11-16

QT录音软件demo示例

在公司开发的录音软件,传上来作为证据。在铭乐扬制作的。

2013-09-25

QT GraphicsView例子

基于QT GraphicsView三层架构所写的例子,通俗易懂,很经典的教程。代码简单易懂,便于初学者学习。

2013-01-25

QT Tcp文件传输demo

开发的基于QT平台的网络通信工具,可用于文件传输,字符串连接等。用C++写的,真的很不错。

2013-01-11

基于QT平台的TCP字符串传播

基于QT平台的TCP协议,采用TCP协议开发的一个示例,用于说明字符串传播,简单易懂,建议收藏。

2013-01-10

蛇形数组的建立与输出demo

建立蛇形数组,并输出运行,可以更改参数,内附源代码,很方便。

2011-04-04

赫夫曼树建立与逆向编码

赫夫曼树的建立与逆向编码,线性存储。内附源代码,根据严蔚敏提供的C++数据结构算法编译。

2011-02-01

判断一个节点是否是另一个节点的子孙

不采用链式方法构建树,并判断一个节点是否是另一个节点的子孙,比较方便。

2010-12-11

赫夫曼树的建立与编码demo

此程序为构造赫夫曼树,以及如何编码,内附源程序

2010-12-11

c++语言编写的词法分析器

虽然关键字只有一少部分,但着重强调了算法的设计,内附源程序,经过调试后可以运行并达到制定效果,如果读者想扩充,只需添加关键字即可。

2010-11-02

传教士与野人过河问题demo

3个传教士,3个野人,过河问题,船只每次最多只能运2人,且如果岸上的野人数多于传教士,野人会吃掉传教士,要将左岸的野人与传教士运往右岸,怎么运

2010-05-17

优秀毕业设计之博客系统源码

价值500元的毕业设计源码,博客系统源码,亲测可用。

2021-12-10

最新C++学习案例源码

C++学习者的福音,总结了常用的C++用法,编写多个demo,涵盖运算符重载,封装继承多态,C11 系统年特性,lambda,function等新功能。

2020-03-21

python爬虫抓取mm图片

爬虫抓取mm图片,采用ptyhon爬虫技术,用到了正则表达式recompile类,用到了urllib库用来请求图片。

2018-11-29

python实现打飞机小游戏

python实现打飞机小游戏

2017-07-28

python实现打飞机游戏

python实现打飞机小游戏,需要安装pygame库

2017-07-28

python实现2048游戏

python实现的2048游戏,初学者可以下载看看。

2017-05-26

python实现图片转字符画

python实现的图片转字符画程序,简单易懂。

2017-05-05

C++封装Redis访问类

C++封装Redis访问类,封装set和get操作

2017-04-26

C++跨平台条件变量和互斥锁封装

用C++封装的跨平台条件变量和互斥量,windows环境和linux环境都测试好用, 是理解条件变量和互斥量的好demo。

2016-10-20

多线程利用semophore同步的demo

利用windows api 和semophore变量进行多线程同步的案例,三个线程分别输出自己的id,但是要求第一个线程输出后换为第二个输出,第二个输出后换为第三个输出,第三个输出后换为第一个输出...

2016-10-15

udp打洞代码示例demo

udp打洞代码,自己测试并应用到公司的项目中,读者可以根据实际需要更改和完善udp这部分代码。

2016-09-18

C++模板实现大根堆的插入删除以及初始化

基于C++ 模板实现的大根堆,里面有大根堆的实现,初始化,插入元素和pop顶端元素,注释详细,并写好了测试代码,简明易懂,想学习的可以下载。

2016-07-13

多线程互斥锁和条件变量demo

基于多线程,学习互斥锁和pthread_cond_wait条件变量实现的demo, 初学者学习。

2016-06-13

libevent服务器 demo

基于libevent实现的一个简单服务器demo,使用了eventbuffer和listener基本回调机制

2016-06-02

我读过的最好的makefile教程

我读过的最好的makefile教程

2016-05-13

事件驱动库libiop

别人封装的libiop库,适合学习事件驱动的人,epoll,slect,iocp等多种模型都有封装。自己做了部分注释

2016-05-12

TCP多线程服务器demo

自己写的TCP简单并发服务器,多个线程各自accept,然后与客户端通信,初学者可以学一学

2016-05-05

TCP简单循环服务器demo

自己写的简单的TCP循环服务器,简单易学,初学者可以看看

2016-05-05

自己封装的epoll事件驱动模型

基于epoll的echo server,用回调函数封装了epoll,以后会添加序列化和粘包处理,以及心跳,慢慢完善。

2016-04-25

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

TA关注的人

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