首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编码最佳实践——里氏替换原则

Liskov替换原则(Liskov Substitution Principle)是一组用于创建继承层次结构的指导原则。...按照Liskov替换原则创建的继承层次结构中,客户端代码能够放心的使用它的任意类或子类而不担心所期望的行为。...Liskov替换原则定义 如果S是T的子类型,那么所有的T类型的对象都可以在不破坏程序的情况下被S类型的对象替换。 基类型:客户端引用的类型(T)。...Liskov替换原则的规则 要应用Liskov替换原则就必须遵守两类规则: 1.契约规则(与类的期望有关) 子类型不能加强前置条件 子类型不能削弱后置条件 子类型必须保持超类型中的数据不变式 2.变体规则...最后 Liskov替换原则是SOLID原则中最复杂的一个。需要理解契约和变体的概念才可以应用Liskov替换原则编写具有更高自适应能力的代码。

1.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

【C++】STL 算法 - 拷贝替换算法 ( 元素复制算法 - copy 函数 | 元素替换算法 - replace 函数 | 替换符合要求的元素算法 - replace_if 函数 )

二、元素替换算法 - replace 函数 1、函数原型分析 在 C++ 语言 的 标准模板库 ( STL , STL Standard Template Library ) 中 , 提供了 replace...元素替换算法函数 用于 将 一个容器中的 指定迭代器范围 的 元素 中 将 指定的 A 值 替换为 B 值 ; replace 元素替换函数 将 输入容器 的 [ 起始迭代器, 终止迭代器 ) 范围...内的 元素 指定的 A 值 替换为 B 值 ; replace 元素替换算法 函数原型 如下 : template void replace...replace 元素替换算法函数 用于 将 一个容器中的 指定迭代器范围 的 符合要求的 元素 替换为 新的 值 ; replace 元素替换函数 将 输入容器 的 [ 起始迭代器, 终止迭代器 )...范围 内的 元素 中 符合要求的 元素 替换为 新的 值 ; replace_if 替换符合要求的元素算法 函数原型 如下 : template <class ForwardIterator, class

11810

算法-字符串替换空格

题目: 实现一个函数,把字符串中的每一个空格替换成”%20”。例如输入”We are happy.”,则输出”We%20are%20happy.”。...解题思路: 首先我们需要先想清楚一点,函数就要求输出替换后的结果,没有说是在原数据上替换,还是可以申请内存,创建一个新的字符串?...后者可以让问题变得简单,用比较直接的方式就可以实现一个时间复杂度为O(n)的代码,首先我们先遍历一遍字符串,找到到底有多少个空格以计算出替换后的长度,在上面的例子中,替换前是14,替换后是18,创建一个长度为...虽然这种方法得到了一个时间复杂度为O(n)的算法,但是一样牺牲了空间复杂度啊,要是我们只考虑在原数据上替换,而不新建数组呢?...用直接修改原数据的方法,从后向前替换空格!就酱: ? 这种方法的话,计算替换后的长度就有了一个新的作用,它告诉我们原数据中最后一位放在新数据的哪一位。

2.4K60

页面调度算法模拟

模拟实现的算法:FIFO,Optimal(最佳置换),LRU,Clock,改进的Clock算法 一、先入先出(FIFO): 最简单的页面置换算法是先入先出(FIFO)法。...: "+pageReplaceCount); 30 } 31 } 二、Optimal(最佳置换) 这是一种理想情况下的页面置换算法,但实际上是不可能实现的。...最佳页面置换算法只是简单地规定:标记最大的页应该被置换。这个算法唯一的一个问题就是它无法实现。当缺页发生时,操作系统无法知道各个页面下一次是在什么时候被访问。...虽然这个算法不可能实现,但是最佳页面置换算法可以用于对可实现算法的性能进行衡量比较。 当请求页面不在内存中时,选择已在内存中的永不使用的或者是在最长时间内不再被访问的页面置换出去,将请求的页面换入。...模拟算法如下: 1 package paging; 2 3 import java.util.LinkedList; 4 5 /** 6 * Optimal(最佳)置换算法 7 *

1.6K60

页面置换算法

页面置换算法有很多,简单介绍几个,重点介绍比较重要的LRU及其实现算法。 一、最优页面置换算法 最理想的状态下,我们给页面做个标记,挑选一个最远才会被再次用到的页面。...当然,这样的算法不可能实现,因为不确定一个页面在何时会被用到。 二、最近未使用页面置换算法(NRU) 系统为每一个页面设置两个标志位:当页面被访问时设置R位,当页面(修改)被写入时设置M位。...三、先进先出页面置换算法(FIFO)及其改进 这种算法的思想和队列是一样的,OS维护一个当前在内存中的所有页面的链表,最新进入的页面在尾部,最久的在头部,每当发生缺页中断,就替换掉表头的页面并且把新调入的页面加入到链表末尾...即给每个页面增加一个R位,每次先从链表头开始查找,如果R置位,清除R位并且把该页面节点放到链表结尾;如果R是0,那么就是又老又没用到,替换掉。...第一轮扫描清除引用位,如果第二轮运行确定被引用,就提升到一个不太可能回收的状态,否则将该页面移动到一个更可能被回收的状态。 处于非活动列表的页面,自从上次检查未被引用过,因而是移除的最佳选择。

2.6K10

页面置换算法

但应将哪个页面调出,需根据一定的算法来实现。   常见的页面置换算法有: 1....最佳置换算法(Optimal) 从内存中移除永远都不再需要的页面或者说是未来最长时间内不再被访问的页面,如果这样的页面存在,则选择最长时间不需要访问的页面。...采用最佳置换算法,可以保证较低的页面更新频率。从理论上讲,由于无法预知哪一个页面是未来最长时间内不再被访问的,因而该算法无法实现,但是可用来衡量其他算法。...2.先进先出页面置换算法(FIFO) 该算法总是淘汰最早进入内存的页面,即选择在内存中停留时间最久的页面予以淘汰。   ...这个算法的实现简单,只需要将进程已调入内存中的页面,按照先后顺序连接成一个队列,设置一个替换指针,总是指向最老的页面

2.6K110

18个最佳的产品页面设计(上)

引言:本文展示了如何让页面变得有趣个性化,展现更多细节和与众不同,让访问者轻松获得想要的信息,下面的18个产品页面设计的最佳案例不容错过。 译者|池金锐 审校|王楠楠 编辑|华 子 1....展示可视化平台功能的最佳方法之一是在产品页面上演示它们。这一页面向用户展示了Wistia的所有功能以及日常用途。 Wistia的产品页面 ? ? 3....到底是什么让这些食品的产品页面如此出色呢?它们以清晰易懂的方式向你展示了超级食物的构成。 查看Daily Harvest的冰沙产品页面。...其中一个伴有歌词: “当你和奥利奥互动时,你的想象力将变得更加丰富”,这是对吃“它们”的“最佳”方式的致敬。该页面采用创新大胆的营销方式,宣传奥利奥是一种不普通的零食。...奥利奥也为这个页面采用了独特的设计。即使饼干本身是单色的,页面也非常丰富多彩,不管是视频还是背景还是图形。 奥利奥的产品页面如下 ? 7.

2.4K30

18个最佳的产品页面设计(下)

引言:本文展示了如何让页面变得有趣个性化,展现更多细节和与众不同,让访问者轻松获得想要的信息,下面的18个产品页面设计的最佳案例不容错过。 译者|池金锐 审校|王楠楠 编辑|华 子 10....当你滚动页面,会看到明确的价值主张,这些价值主张使用对品牌而言真实的有趣语言。页面的一切都在表达着“简单易用”,“有趣”和“有效”。 芒果外语的产品页面 ? 13....像这样的有用提示超越了普通的电子商务产品页面。 Minwax产品页面,带有产品搜索框 ? 15....产品页面最佳特性可能是用动图体现的,或者采用循环播放的视频来展示服装的弹性和灵活性。...考虑到这一点, Nfant的详细但易于理解的产品页面非常了解买家的需求。 nfant-nipple-产品页面 ? ? 产品页面设计的最佳案例 ? 因此,关于优秀的产品页面,这些品牌告诉了我们什么?

94620

STL中移动移除填充替换算法

如果源序列可以被替换或破坏,就可以选择使用move() 算法。如果不想扰乱源序列,可以使用 copy() 算法。 2.swap_ranges() 交换两个序列。...6.replace() 用新的值来替换和给定值相匹配的元素。 replace()前两个参数是被处理序列的正向迭代器,第 3 个参数是被替换的值,第 4 个参数是新的值。...它的前两个参数是输入序列的正向迭代器,第 3 个参数是输入序列的开始迭代器,最后两个参数分别是要被替换的值和替换值。...replace_copy_if()和 replace_if() 算法是相同的,但它的结果会被保存到另一个序列中。...ostream_iterator {std::cout," "}); cout<<endl; //replace_copy //最后两个参数分别是要被替换的值和替换

1K40
领券