自定义博客皮肤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)
  • 收藏
  • 关注

原创 Chapter 4 of Effective C++ (设计与声明)

令Day, Month和Year成为成熟且充分锻炼的classes并封装器数据,比简单使用structs好。但即使当前也足够示范:明智而审慎地导入新类型对预防“接口被误用”有神奇疗效。许多客户端错误可以因为导入新类型而获得预防(类型系统)。欲开发一个“容易被正确使用,不容易被误用”的接口,首先必须考虑客户可能做出什么样的错误。乍见之下这个接口很合理,但它使客户很容易犯下至少两个错误。

2024-03-28 23:14:46 198 1

原创 Chapter 3 of Effective C++ (资源管理)

同时,若通过copy构造函数或copy assignment操作符复制它们,它们会变成null,复制所得的指针会取得资源的唯一拥有权!其具有的问题事,无论delete如何被略过去(中间发生return,异常退出或goto等),我们泄露的资源不只是内含投资对象的那块内存,还包括那些投资对象所保存的任何资源。auto_ptr是个“类指针对象”,其析构函数自动对其所指对象调用delete。(auto_ptr现已被抛弃)为防止资源泄露,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放资源。

2024-03-21 23:22:46 342

原创 Chapter 2 of Effective C++ (构造/析构/赋值运算)

默认生成的copy构造函数和copy assignment操作符只是单纯的将源对象中的每一个non-static成员变量拷贝到目标对象(浅拷贝)。若一个类中存在const成员或引用成员,则不能使用默认生成的拷贝赋值操作符。

2024-02-26 22:17:12 399

原创 Chapter 1 of Effective C++

c++并不是一个带有一组守则的一体语言,它是由四个次语言组成的联邦政府(c, Object-Oriented C++, Template C++, STL),每个次语言都有自己的规约。条款01:视C++为一个语言联邦。

2024-01-15 00:02:22 401

原创 设计模式之:与设计模式相处

如果你发现自己处于某个情境下,面对着愈达到的目标被一群约束影响着的问题,然而,你能够应用某个设计,克服这些约束并达到该目标,将你凌想某个解决方案。(设计模式是解决一个经常重复发生的设计问题):是在某情境下,针对某问题的某种解决方案。

2023-12-09 17:00:20 178

原创 设计模式之十二:复合模式

现在需要保证Quackable的具体类都能扮演QuackObservable角色(在具体类中添加一个arraylist变量,然后实现接口方法)。但这里用的不同的做法(不知道为什么),在Observable类中封装注册和通知的代码,然后将其和具体类组合在一起。需求3,有时候我们在代码中可能搞忘装饰对象,所以我们希望在最开始创建的时候就确保鸭子是被装饰过的:工厂模式。需求1,有鸭子的地方大概率就会有鹅,怎样在模拟器使用鹅呢?需求2,如果在不变化鸭子类的情况下,计算呱呱叫的次数呢?

2023-11-26 15:29:08 493

原创 设计模式之十一:代理模式

RMI提供了客户辅助对象和服务辅助对象,为客户辅助对象创建和服务对象相同的方法。RMI的好处在于你不必亲自写任何网络或I/O代码。客户程序调用远程方法就和运行在客户自己本地JVM对对象进行正常方法调用一样。代理可以控制和管理访问。步骤一:制作远程接口。步骤一:制作远程实现。

2023-11-12 23:07:00 1142

原创 设计模式之十:状态模式

以上的代码最大的问题就是没有遵守开发-关闭原则,一遇到新的需求(投币后有10%的概率出现“赢家”状态,给出2颗糖果)就需要修改源代码,重新整理所有代码的逻辑。通过将行为包装进状态对象中,可以通过在context内简单改变状态对象来改变context的行为。:允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类。策略模式和状态模式的类图是一样的(回去翻了下书,好像没瞅到),但。在新的糖果机中,我们不使用静态整数,而使用state对象。状态模式通过改变对象内部的状态来帮助对象控制自己的行为。

2023-09-17 22:20:22 706

原创 设计模式之九:迭代器与组合模式

若用户直接从这些数据结构中取出对象,则需要知道具体是存在什么数据结构中(如栈就用peek,数组[])。迭代器能够让客户遍历你的对象而又无法窥视你存储对象的方式。这两种不同的菜单表现方式,会使得女招待需要知道菜单的实现细节,才能对菜单进行遍历。对象村餐厅和煎饼屋合并了,它们有着不同的菜单列表,但菜单项基础都是一样的。因此,我们需要创建一个对象(迭代器),封装“遍历集合内的每个对象的过程”。当我们拥有迭代器接口后,我们就可以为各种对象集合实现迭代器。如果还有第三家餐厅以不同的实现出现,我们就需要有三个循环。

2023-08-27 18:02:03 768

原创 设计模式之八:模板方法模式

别调用我们,我们回调用你。此原则可以防止“依赖腐败”,高层组件依赖低层组件,低层又依赖高层组件,...。在一个方法中定义了一个算法的骨架,而且将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现(依赖子类提供某些或所有步骤的实现,父类拥有并保护这个算法)。Hook(钩子)这个方法可以什么都不做,子类视情况决定是否覆盖它们,也可以做一些默认的事情。钩子的存在可以让子类有能力对算法的不同点进行挂钩。

2023-08-26 18:55:52 705

原创 设计模式之七:适配器模式与外观模式

当你想要观影的时候,必须先执行一些任务,如打开DVA、投影机、屏幕、音响、爆米花机,然后调整好声音,屏幕大小等。这十分的麻烦,因此,我们可以使用外观模式,提供一个方法,把以上内容都搞定。提供了一个统一的接口,用来访问子系统中的一群接口。接下来会马上介绍外观模式,我们在这里可以通过模式的设计意图区分装饰者、适配器和外观模式。将一个类的接口,转换成客户期望的另一个接口。实际上,适配器有两种,前面介绍的是“对象” 适配器。下面则是“类”适配器。面向对象适配器将一个接口转换成另一个接口,以符合客户的期望。

2023-08-13 17:13:20 788

原创 设计模式之六:命令模式(封装调用)

假如需要一个遥控器,遥控器有一个插口可以插上任意的命令接口(比如控制空调开关,洗衣机开关,客厅灯开关)。Receiver就是灯这个对象,把灯这个对象封装到command对象中,再使用组合,把command放在invoker(遥控器)里面。这样子invoker就不知道具体的操作细节,并可以与具体操作解耦。命令模式:将请求封装成对象,这可以让你使用不同的请求、队列或者日志请求来参数化其它对象。命令模式可以将请求的对象和执行请求的对象解耦(实际上是通过命令对象进行沟通,即解耦)。(个人感觉,这章讲的很一般)

2023-08-06 17:33:14 1032

原创 设计模式之五:单例模式

这种方法又叫做 Meyers' SingletonMeyer's的单例, 是著名的写出《Effective C++》系列书籍的作者 Meyers 提出的。对比全局变量,其需要在程序开始就创建好对象,如果这个对象比较耗资源,而在后面的执行过程中又一直没有用到,就造成了浪费。具体的可以看下最后贴的参考文献。如果当变量在初始化的时候,并发同时进入声明语句,并发线程将会阻塞等待初始化结束。这样保证了并发线程在获取静态局部变量的时候一定是初始化过的,所以具有线程安全性。

2023-08-06 16:30:56 1226

原创 Modeling Learning (UG)

模型当中就分为冲压生产线、生产线设计和船舶结构三种。

2023-08-05 23:55:29 175

原创 设计模式:生成器模式

这个模式书上讲的比较简单,但是感觉精华应该是讲到了。引用下其它博客的总结:生成器模式的核心。

2023-07-30 21:08:37 511 1

原创 设计模式之四:工厂模式

我们知道其中的if..elseif..elseif代码部分会改变,因此,我们阔以将创建pizza的代码移到一个专职创建pizza的对象中去。这个新对象就叫做“工厂”,一旦有了SimplePizzaFactory,orderPizza就变成了此对象的客户。这里有一些相关的具体类,要在运行时有一些具体条件来决定究竟实例化哪个类。这样的代码(if..elseif..elseif),一旦有变化或扩展,就必须重新打开进行检查和修改。(利用静态方法定义一个简单的工厂,被称为静态工厂。

2023-07-29 16:52:23 557

原创 Zero-overhead principle(零开销抽象)

【代码】Zero-overhead principle(零开销抽象)

2023-07-09 23:25:59 194

原创 设计模式之三:装饰者模式

如果要改变一种调味的价格,也需要修改许多的类)(利用继承设计子类的行为,是在编译时静态决定的,而且所有子类都会继承到相同行为。然而,如果利用组合的做法扩展对象行为,就可以在运行时动态进行扩展)可以通过set方法来设置添加调料的种类,然后在基类的cost计算调料的价格。子类中的cost再调用父类的cost并加上自己的价格。装饰者模式可以在不修改任何底层代码的情况下,给对象赋予新的职责(使用对象组合的方式,在运行时装饰类)。对修改关闭是因为,现有代码是正确的,如果允许修改,则容易引入bug。

2023-07-09 17:09:58 537

原创 设计模式之二:观察者模式

假定我们需要为Weather-O-Rama公司建立一个气象站系统,除已有的WeatherData有数据源类,还需要更新三个布告板的显示:目前状况(温度、湿度、气压)、气象统计和天气预报。除使用上面的“推”方式主动将数据传送给观察者,还可以通过“拉”方式主动拉取数据(可以传递一个主题对象,或者数据对象给update方法,或者从私有变量中提取)。观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。另一方面,观察者使用这些状态,虽然这些状态不属于他们。

2023-07-08 23:20:45 745

原创 Motion Learning (UG)

新建仿真文件(.sim)仿真文件和我们的部件必须放在同一目录。

2023-06-28 22:20:39 473

原创 设计模式入门:策略模式

但如果出现一个橡皮鸭,我们只能在子类中覆盖fly方法,FlyNoWay,同时,也需要覆盖quack方法,吱吱叫。如果还有其它的鸭子子类,如诱饵鸭等等,那么就需要在各自的子类中进行修改,检查是否需要修改quack和fly方法。这本书是用的Java,如果这里是C++,是不是会想到flyable和quackable是接口,然后再有类继承接口,最后Duck子类实现多类继承?(会变化的部分封装起来,以后就可以轻易改动或扩充此部分,而不影响其它不需要变化的部分)或者直接是继承多个超类,需要覆盖的在子类中覆盖?

2023-06-04 15:54:14 518

原创 如何设计一个泛型算法

1 返回一个新的vector,其中包含原vector中小于特定值的所有数值。2 如果允许用户指定不同的比较操作,怎么将“比较操作”参数化呢。

2022-11-13 20:56:51 147 1

原创 C++ Cherno 左值,右值,移动语义,std::move

① 用一个对象a创建另一个对象b(b中存储a)时。② 从函数中返回一个对象(返回值优化也可解决?2 不能将右值赋值给左值引用 (左值引用的只能是左值)1 左值是有某种存储支持的变量,右值是临时值。b) 移动语义本质上允许我们移动对象。

2022-11-06 17:25:14 232

原创 CPU个数、核数、逻辑CPU概念和ubuntu查看对应数量

........

2022-09-21 23:01:02 746

转载 字符串赋值给字符指针(char *a=“hello“)的正确理解方式

则将会从字符数组的首地址开始复制,如果字符数组中明确指定了'\0'元素,则会在'\0'处停止,而若没有'\0'元素,则程序可能会不停的复制,直到在程序的内存中碰到'\0',这样可能会得到不希望的结果。//这种方式由系统自动给该字符指针指定了一个内存中的位置,并且该位置的字符数组为{'a', 'b', 'c', 'd', 'e', 'd', '\0'};因为定义的是一个字符数组,所以就相当于定义了一些空间来存放"abc",而又因为字符数组就是把字符一个一个地存放的,所以编译器把这个语句解析为。

2022-08-23 22:37:05 5038 1

原创 C++ vector erase and remove

代码】C++ vector erase and remove。

2022-08-10 14:56:25 241

原创 AcWing 算法基础课 C++ 学习 (Day31 - Day60)

代码】AcWing算法基础课C++学习(Day31-Day60)

2022-07-31 23:17:42 400 1

原创 C++ 访问权限

C++ 访问权限

2022-07-14 20:46:20 562

原创 nowcoder C++ 应试题(857)

1. 动态多态是由纯虚函数实现的。 错误,是由虚函数和重写实现的2. ③是错的3. 输出 1

2022-06-21 22:29:00 290

原创 AcWing 算法基础课 C++ 学习

Day 1 (2022.5.14)// AcWing 785. 快速排序#include <iostream>using namespace std;const int N = 100010;int q[N];void quick_sort(int q[], int l, int r){ if (l >= r) return; int i = l - 1, j = r + 1, x = q[(l + r) >> 1];

2022-05-14 21:54:36 442

原创 Cherno C++ basic

Day 1 (2022.4.26)// 在#后面的都是预处理语句,编译器收到源文件后首先处理预编译语句(发生在实际编译之前)// #include <iostream> 将iostream文件的所有内容拷贝到当前文件,之所以要拷贝,是因为需要一个被 // 调函数的声明// main函数不写return则默认返回0// 重载运算符其实是函数std::cout.print("Hello World!").print(std::endl);// std::cin.get() 等

2022-04-27 00:23:12 999

原创 充电计划

C++ 基础语法课 - AcWing -> 程序员面试宝典 -> 面试课 - AcWing -> Cherno讲解课 -> 剑指offer - AcWing + 书 -> Linux基础课 - AcWing

2022-03-30 14:50:10 900

原创 Python3 进制转换

# 将其它进制表示的字符串转换为10进制的整数输出# 将16进制的10转化成10进制输出a = int('10',16)# 将10进制整数转为其它进制# 前缀依次为0x 0o 0b,十六进制的字母为小写# 0x10a = hex(16)

2022-03-20 21:00:24 620

原创 C++ 基础语法课 - AcWing

Day 1 (2022.4.16)cin cout printf scanf 都在头文件iostreamscanf的读入数据不管是空格或者一行隔开,都可以直接读入(只用scanf不用std命名空间)Day 2(2022.4.17)string 这个库是在iostream里面有的,且只能用cin来读。abs在iostream有。#include <iostream>using namespace std;int main(){ ...

2022-03-18 16:31:18 1522

原创 AcWing 蓝桥杯C++ AB组辅导课学习记录(Python,备战蓝桥杯)Day61 - Day86

Day 61 (2022.3.14)

2022-03-14 22:02:40 2133

原创 Python 直接赋值、[:]赋值、浅拷贝和深度拷贝解析

直接赋值:其实就是对象的引用(别名)。 [:]:拷贝父对象,不会拷贝对象的内部的子对象。 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。 深拷贝(deepcopy):copy 模块的 deepcopy 方法,完全拷贝了父对象及其子对象。 import copya = [1, 2, 3, 4, ['a', 'b']] # 原始对象b = a # 赋值,传对象的引用c = a[:]d = copy.copy(a) # 对象拷贝,浅拷贝e...

2022-03-06 12:22:52 255

原创 Python stdin 和 stdin.readline()

# stdin 像是 while readline()# 会自动结束程序 (在acwing 1295)for x in stdin: # do something# 如果用stdin.readline()必须手动判断是否结束while True: x = stdin.readline().strip('\n') if not x: break

2022-02-27 21:42:54 607 2

原创 AcWing 蓝桥杯C++ AB组辅导课学习记录(Python,备战蓝桥杯)Day31 - Day60

Day 31 (2022.2.12)# acwing 1224. 交换瓶子if __name__ == '__main__': n = int(input()) arr = [0]+[int(x) for x in input().split()] st, cnt = [0]*(n+1), 0 for i in range(1,n+1): if not st[i]: cnt += 1 w..

2022-02-12 22:27:45 1482

原创 Visual Studio 环境变量

以美元符号$开头 + 一对括号,这样进行引用的就是我所谓的环境变量环境变量名 含义 $(SolutionDir) 解决方案目录:即.sln文件所在路径 $(Configuration) 当前的编译配置名称,比如Debug,或Release $(ProjectName) 当前项目名称 $(ProjectDir) 项目根目录: 即.vcxproj文件所在路径 $(SolutionName) 解决方案名称 $(TargetDir) 项目输出文.

2022-01-18 00:26:27 2141

原创 Visual Studio 包含目录、附加包含目录和库目录和附加库目录

包含目录和附加包含目录(include、additional Include)Visual Studio C++工程中,右键一个Project,可以发现有两个地方设置Include的相关目录:1. VC++ Directories -> Include Directories2. C/C++ -> General -> Additional Include Directories“VC++ Directories -> Include Directories” : Di

2022-01-18 00:12:37 2549

空空如也

空空如也

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

TA关注的人

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