自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

金色的省略号

不积跬步无以至千里,不积小流无以成江海

  • 博客(270)
  • 收藏
  • 关注

原创 标准库算法函数:std::find_if

下面是函数原型该函数,用来在容器中查找符合条件的元素,

2024-03-12 20:18:00 524

原创 9、组合模式(结构性模式)

把大学、学院、系抽象为组织结点类,都是结点类的子类(其中大学子类、学院子类是组合类型的类,系是叶子类型的类),组合类型的子类University、College,重写基类成员函数,代码几乎一样。组合模式又叫部分整体模式,它创建了对象组的树形结构,将对象组合成树状结构,举例,大学、学院、系,它们之间不是继承关系,叶子类型的子类(Department),一个大学,n个学院,一个学院m个系,大学、学院是。:大学由学院组成,学院由系组成,但是它们。的,它们都包含结点成员,系是。

2024-03-10 10:50:37 565

原创 21、状态模式(行为性模式)

【代码】【无标题】

2024-03-07 11:13:21 652

原创 派生类对象、虚析构、虚继承、虚基类

因为当一个基类指针指向一个动态构造的派生类的对象时,在释放对象的空间时,如果基类析构函数不是虚析构,只会调用基类析构,而不会调用派生类析构,造成内存泄漏。在多重继承下,一个基类可以在派生层次中出现多次,程序会通过继承层次多次继承同一基类的类,类通过虚继承指出它希望共享其虚基类的状态,,基类部分是属于派生类的组成部分,是派生类继承基类的,基类部分由基类构造函数构造,但是,,派生类对象只能访问基类部分的共有,派生类内不能访问基类部分的私有。,共享的基类子对象称为虚基类。

2024-01-23 11:16:36 429

原创 转换操作符转换类型:普通函数指针(普通函数、类的静态函数)、类的成员函数指针

转换操作符是一种特殊的类成员函数它定义将类类型值转变为其他类型值的转换这里,type表示内置类型名、类类型名 或 由类型别名所定义的名字,本文讨论转换普通函数指针类型、类的静态函数指针类型以及转换类的成员函数指针类型。

2024-01-18 22:33:25 726

原创 基类的友元类,可以访问其派生类的私有虚函数

我们知道一个基类的友元类,并不是其派生类的友元类 ,

2024-01-13 15:11:44 461

原创 文本单词查询复合表达式求值的实现案例分析

本文讨论的“”案例,来自C++ primer第四版,该案例面向对象编程和泛型编程,,是综合性很强的程序。

2024-01-12 16:45:14 1022

原创 输出分离与输出抽象

【代码】输出分离与输出抽象。

2023-11-22 13:48:23 86

原创 理解复制构造和赋值操作符之间的区别

【代码】理解复制构造和赋值操作符之间的区别。

2023-11-20 16:22:49 84

原创 函数指针数组作为函数参数

【代码】函数指针数组作为函数参数。

2023-11-20 15:47:37 89

原创 程序设计与算法(二)算法基础(北京大学MOOC)

##简单的整数划分问题。###复杂的整数划分问题。###宠物小精灵之收服。###2的幂次方表示。###输出前k大的数。###求排列的逆序数。###最佳加法表达式。

2023-10-30 09:44:09 976

原创 元组tuple存储标准库function实例对象( 包装各种类对象及其成员函数 )、解包元组对象(C++17)

先把各种类及其对象包装成标准库function实例对象,并存储到元组tuple对象,创建用来解包的模板函数,解包元组,并使用function函数对象。

2023-10-16 20:27:19 140

原创 function+bind实现多态(松耦合)

基类定义虚函数,子类实现虚函数,使用基类指针指向子类对象,从而实现多态,,这里没有继承、没有指针、没有虚函数、松耦合…将某类对象及其行为包装为模板类function的实例对象,或以模板函数bind将某类对象及其行为包装为模板类function的实例对象,定义包含模板类function的实例对象的Base类,使用Base类可以表现为多态性。

2023-10-16 09:32:15 433

原创 可变参数模板、可变参数存储为元组tuple、元组解包为函数参数(C++14标准)

可变参数模板,可变参数存储为元组,元组解包为函数参数

2023-10-10 17:04:25 342

原创 对象与成员函数指针 function+bind

function模板类的构造函数,把对象与成员函数绑定,重载了(),利用对象调用成员函数。bind模板函数,把对象与成员函数绑定,返回function对象。

2023-10-09 15:50:42 306

原创 C++设计模式

C++设计模式。

2023-10-09 10:13:36 55

原创 C++学习笔记

  1、默认情况下,对于一个实例化了的类模板,其成员只有在使用时才被实例化  2、在一个类模板的作用域内,可以直接使用模板名而不必指定模板实参  3、...

2023-09-20 16:04:00 30

原创 模板函数的模板参数、函数参数,模板类的模板参数、构造函数参数,重载非const调用操作符

  一、模板函数有模板参数和函数参数,重载调用操作符的类 及 函数指针作为模板实参,其函数参数及函数参数的传参,测试代码如下:#include <iostream>using namespace std;//keystring s1("Hello");string s2("World");//重载了调用操作符的类其对象称为函数对象class cmp{publi...

2023-09-17 19:37:00 68

原创 左值右值 右值引用 移动语义 完美转发

  一、左值与右值  左值 与 右值是C++中表达式的属性,在C++11中,每个表达式有两个属性:类型(type,除去引用特性,用于类型检查)和值类型(value category,用于语法检查,比如一个表达式结果是否能被赋值)。  值类型包括3个基本类型:lvalue、prvalue与xrvalue,后两者又统称为rvalue,lvalue我们称为左值,可以将左值看成是一个可以获取地址...

2023-09-08 11:29:00 64

原创 C++11的新特性

  2.1.1 long long类型  除字符和布尔类型外,其他整形用于表示不同尺寸的整形,一个long long 至少和一个long一样大,其中,数据类型long long 是在C++11中新定义的  2.2.1 列表初始化  作为C++11新标准的一部分,用花括号来初始化变量得到了全面应用,这种初始化的形式被称为列表初始化 std::vector<string>...

2023-08-17 09:53:00 205

原创 windows下使用make命令

  windows下使用make命令  一、使用Chocolatey管理工具安装make(安装make失败)  PowerShell的安装:本人win7没有PowerShell,需要安装补丁Windows6.1-KB2506143-x64.msu 或 Windows6.1-KB2506143-x86.msu,前者是64位,后者是32位,下载地址:Windows Management Fram...

2023-08-02 16:23:00 249

原创 吃巧克力,容器vector、map,容器适配器 priority_queue,算法sort排序

  有 n 种巧克力,巧克力的4个属性:价格、保质期、数量、种类编号(id),每天吃一个巧克力,吃x天,如何花费最低 输入:第一行x,n,接下来n行巧克力的价格、保质期和数量 输出:最低价格  1、算法分析:  按价格从小到大排序,从第一天开始,每天吃一个巧克力,但是,巧克力有保质期,在后面可能没有在保质期内的巧克力可以吃了,这个思路走不通;  按保质期从小到大排序,为了巧克力...

2023-03-27 22:27:00 23

原创 二维数组的前缀和(为了计算子矩阵和)

  1、二维数组的前缀和      设二维数组,int arr[5][7];,以 arr[1][1] 作为矩形的左上角坐标,以此开始存储数据,数组最左边,最上边不存储数据,为空  设二维数组,int sum[5][7];,用以保存 arr 数组的前缀和,计算公式:sum[i][j] = arr[i][j] + sum[i-1][j] + sum[i][j-1] - sum[i-1][j-1...

2022-11-07 11:06:00 360

原创 C++ PRIMER 学习笔记 第十八章

第十八章 特殊工具与技术  18.1 优化内存分配  C++的内存分配是一种类型化操作:new为特定类型分配内存,并在新分配的内存中构造该类型的一个对象,new表达式自动运行合适的构造函数来初始化每个动态分配的类类型对象    18.1.1 C++中的内存分配  对未构造的内存中的对象进行赋值而不是初始化,其行为是未定义的,赋值涉及删除现存对象,如果没有现存对象,赋值操作符中的动作就会...

2022-08-10 10:44:00 59

原创 C++ PRIMER 学习笔记 第十七章

第17章 用于大型程序的工具  大规模应用程序往往具有下列特殊要求:更严格的正常运转时间以及更健壮的错误检测和错误处理;能够用各种库构造程序;能够处理更复杂的应用概念  17.1 异常处理  使用异常处理,程序中独立开发的各部分能够就程序执行期间出现的问题相互通信,并处理这些问题,提供异常我们能够将问题的检测和问题的解决分离,这样程序的问题检测部分可以不必了解如何处理问题,异常处理中,...

2022-08-10 10:43:00 27

原创 C++ PRIMER 学习笔记 第十六章

第四部分 面向对象编程与泛型编程  第十六章 模板与泛型编程  所谓泛型编程是以独立于任何特定类型的方式编写代码,使用泛型程序时,我们需要提供具体程序实例所操作的类型或值,模板是泛型编程的基础,使用模板时无须了解模板的定义,在泛型编程中,我们所编写的类或函数能够多态地用于跨越编译时不相关的类型,一个类或一个函数可以用来操纵多种类型的对象  16.1 定义模板    16.1.1 定...

2022-08-10 10:42:00 75

原创 C++ PRIMER 学习笔记 第十五章

  第十五章 面向对象编程  面向对象编程基于三个基本概念:数据抽象、继承、动态绑定,在C++中,用类进行数据抽象,用来派生从一个类继承另一个类:派生类继承基类的成员,动态绑定使编译器能够在运行时决定是使用基类中定义的函数还是派生类中定义的函数  继承和动态绑定在两个方面简化了我们的程序:能够容易地定义与其他类相似但又不同的新类,能够更容易地编写忽略这些相似类型之间区别的程序第一版...

2022-08-10 10:42:00 64

原创 C++ PRIMER 学习笔记 第十四章

第14章 重载操作符与转换  C++允许重定义操作符用于类类型对象时的含义,可以像内置转换那样使用类类型转换,将一个类型的对象隐式转换到另一类型  14.1 重载操作符的定义  重载操作符是具有特殊名称的函数,保留字operator后需接定义的操作符符号,像任意其他函数一样,重载操作符具有返回类型 和 形参表  重载操作符必须具有至少一个类类型或枚举类型的操作数...

2022-08-10 10:41:00 29

原创 C++ PRIMER 学习笔记 第十二章

第三部分 类和数据抽象第12章 类    在c++中,用类来定义自己的抽象数据类型(abstract data type),通过定义类型来对应所要解决问题中的各种概念,数据抽象能够隐藏对象的内部表示,同时仍然允许执行对象的共有操作  12.1类的定义和声明    12.1.1 类定义  类就是定义了一个新的类型和一个新的作用域,每个类可以没有成员,也可以...

2022-08-10 10:40:00 25

原创 C++ PRIMER 学习笔记 第十三章

第13章 复制控制  当定义一个新类型的时候,需要显式或隐式地指定复制、赋值和撤销该类型的对象时会发生什么,这是通过定义特殊成员:复制构造函数、赋值操作符和析构函数来达到的,复制构造函数、赋值操作符和析构函数总称为复制控制,编译器自动实现这些操作,但类也可以定义自己的版本#include <iostream>using namespace std;class A{p...

2022-08-10 10:40:00 21

原创 C++ PRIMER 学习笔记 第十一章

  第十一章 泛型算法    标准库没有给容器添加大量的功能函数,而是选择提供一组算法,这些算法大都不依赖特定的容器类型,是“泛型”的,可作用在不同类型的容器和不同类型的元素上,大多数算法是通过遍历由两个迭代标记的一段元素来实现其功能,算法通过迭代器访问元素,这些迭代器标记了要遍历的元素范围,包含头文件 #include <algorithm>    11.1 概述...

2022-08-10 10:39:00 32

原创 C++ PRIMER 学习笔记 第十章

第十章 关联容器    关联容器和顺序容器的本质差别在于:关联容器通过键(key)存储和读取元素,而顺序容器则通过元素在容器中的位置顺序存储和访问元素  关联容器支持通过键来高效地查找和读取元素,两个基本的关联容器类型是map和set,map的元素以键-值对的形式组织,set仅包含一个键  map和set类型的对象,所包含的元素都具有不同的键,不允许为同一个键添加第二个元...

2022-08-10 10:38:00 28

原创 C++ PRIMER 学习笔记 第九章

第二部分 容器和算法  第九章 顺序容器  顺序容器、关联容器只是逻辑上的,物理上的存储有顺序存储、链式存储,容器使用哪种存储方式,根据具体需要。  顺序容器,是将单一类型元素聚集起来成为容器,然后根据位置来存储和访问这些元素,标准库定义了三种顺序容器类型:vector(支持快速随机访问)、list(支持快速插入/删除)、deque(double-ended queue的简写...

2022-08-10 10:37:00 29

原创 C++ PRIMER 学习笔记 第八章

  操纵符是一个函数或一个对象,会影响流的状态,并能用作输入或输出的运算符的运算对象(操作数)(a manipulator is a function or object that can be used as an operand to an input or outputoperator.)第8章 标准IO库   8.1 面向对象的标准库  sstream所定义的类型用于读写存...

2022-08-10 10:37:00 22

原创 C++ PRIMER 学习笔记 第六章

第六章 语句  语句类似于自然语言的句子,C++语言既有只完成单一任务的简单语句,也有作为一个单元执行的由一组语句组成的复合语句,提供了实现条件分支结构以及重复地执行同一段代码的循环结构的语句,通常情况下,语句是顺序执行的,C++定义了一组控制流语句(if和switch语句,for、while、do while语句),允许有条件地执行或重复地执行某部分功能  6.1 简单...

2022-08-10 10:35:00 27

原创 C++ PRIMER 学习笔记 第七章

第七章 函数  7.1 函数的定义  函数由函数名以及一组操作数类型唯一地表示,函数的操作数,即形参,在一对圆括号中声明,形参与形参之间以逗号分隔,函数执行的运算在一个称为函数体的块语句中定义,每一个函数都有一个相关联的返回类型  函数调用:C++语言使用调用操作符(call operator,即一对圆括号)实现函数调用,调用操作符,需要操作数并产生一个结果,调用操作符的操作数...

2022-08-10 10:35:00 23

原创 C++ PRIMER 学习笔记 第四章

第4章 数组和指针  C++程序应尽量使用vector 和 迭代器类型,避免使用低级的数组和指针  4.1 数组  数组是由 类型名、标识符和 维数 组成的复合数据类型,类型名规定了存放在数组中的元素的类型,维数指定数组中包含的元素个数    4.1.1 数组的定义和初始化  数组的维数必须用值大于等于1的常量表达式定义,此常量表达式只能包含整形字面值常量、枚举常量或...

2022-08-10 10:34:00 23

原创 C++ PRIMER 学习笔记 第五章

第5章 表达式  C++提供了丰富的操作符,并定义操作数为内置类型时,这些操作符的含义,除此之外,C++还支持操作符重载,允许程序员自定义用于类类型时操作符的含义,操作符执行什么操作以及操作的结果的类型,取决于操作数的类型,操作符对其操作数的类型有要求,如果操作符应用于内置或复合类型的操作数,则由C++语言定义其类型要求,如,用于内置类型对象的解引用操作符要求其操作数必须是指针类型...

2022-08-10 10:34:00 31

原创 C++ PRIMER 学习笔记 第三章

第三章 标准库类型   除基本类型外,C++还定义了一个内容丰富的抽象类型标准库,其中最重要的标准库类型是string和vector,它们分别定义了大小可变的 字符串 和 集合,迭代器作为配套类型,用于访问 string 中的字符和 vector 中的元素,标准库类型bitset,提供了一种抽象方法来操作位的集合,通过这个类可以把某个值当作位的集合;标准库定义了许多高级抽象数据类型,...

2022-08-10 10:31:00 17

原创 C++ Primer 学习笔记 第二章

  第一部分 基本语言  基本上所有的语言都提供下列特征:内置数据类型,表达式和语句,变量,控制结构,函数  C++是静态类型语言,在编译时执行类型检查,C++提供了一组内置数据类型、操纵这些类型的操作符和一组少量的程序流控制语句,C++的表达能力是通过支持一些允许程序员定义新数据结构的机制来提升的,C++重要特征是类,程序员可以使用类自定义数据类型,类类型,C++标准库利用这些特征,实现了...

2022-08-10 10:29:00 34

空空如也

空空如也

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

TA关注的人

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