C++ | 函数对象 & 匿名函数
本文仍为草稿
在 C++ | STL III 的最后, 我们曾简单地谈到了函数对象和匿名函数
函数对象
众所周知, C++ 出现的一个主要目的就是实现面向对象程序设计(Object-Oriented Program), 在先前的三篇有关 STL 的文章中我们详细讨论了什么是对象, 实际上, 早在 C++98 时代, C++ 中的对象的概念就不止限定在类或结构体上面, 函数也可以是 “对象”
C++98 提供了有关函数对象的库 <functional>, 引入这个库
#include<functional>
这个库提供了很多基础的预定义函数对象, 帮助库 <algorithm> 中算法的实现, 包括了内置函数对象, 谓词等
内置函数对象
下面是一个实例, 我们用类型 int 实例化了加减乘除和取模五种运算函数, 调用这些运算函数对象, 和直接使用运算符并没有差别, 但是这种写法更加符合 “泛型” 的概念–即我们可以对不同的对象使用一样的函数, 达到各自的效果
int main(){ auto _plus = std::plu ...
C++ | 继承
这是 C++ 网课学习笔记
继承与 hiding
回顾之前给出的代码示例
class Shape { // 基类 Shapeprivate: void prepare() { /* 做一些准备(例如准备画笔)*/ } void finalize() { /* 做一些后续处理(例如重置画笔)*/ }public: Point center; // 共有的成员变量 void draw() { // 共有的成员函数 prepare(); do_draw(); finalize(); } virtual void do_draw() = 0; // 要求所有派生类都实现 do_draw()};class Circle : public Shape { // Circle 继承 Shapepublic: int radius; // 独有的成员变量 void do_draw( ...
信息安全原理与数学基础
基本信息
授课教师:zbs
See also: xyx - 信息安全原理与数学基础
信息安全原理(不做考试要求)
数理逻辑
集合论
图论
代数系统
概率论
数据结构基础
Basic Infomation
Teachers: yzq
See Also: Foreverhyx’s FDS notes
Introduction
Algorithm Analysis
Linear Table
Tree
Heap
Disjoint Set
Graph - Topologic Sort
Mid Term Record
Graph - Shortest Path & DFS
Sorting
计算机系统I
Basic Infomation
Teachers: wht, ll
Lab Docs: 浙江大学24年春夏系统贯通一实验( ZJU intranet required )
Introduction
Binary Representation
Digital Logic TODO
Combinational & Sequential Logic Design TODO
ISA
微积分II [暂停更新维护]
微积分好难
暂停更新 & 维护
基本信息
授课教师: bwh
上课教材: 《微积分》(sdk版)
常见积分公式
第 11 章 级数
第 7 章 矢量代数与空间解析几何
第 8 章 多元函数微分学
C++ | 智能指针
这是 C++ 网课学习笔记
建议先阅读上一节 右值引用 & 移动语义 或对内容有一定了解后再来阅读本篇笔记
1 引入: 为什么我们需要智能指针
1.1 问题一
观察以下代码
void science(double* data, int N) { double* temp = new double[N*2]; do_setup(data, temp, N); if (!needed(data, temp, N)) return; calculate(data, temp, N); delete[] temp;}
不难理解, 函数 science() 接受两个参数, 一个表示数组 data 的首元素地址, 一个表示数组的长度
这说明了一个数组类型包含了三个信息: 数组元素类型, 首元素地址和长度; 然而当我们把数组作为指针传入时, 我们却丧失了长度这个信息, 只能用一个额外的 N 储存这个信息
回到函数体本身, 这个函数实现的功能很简单, 假如 needed() 为真, 则对 data 调用 calcula ...
C++ | 右值引用 & 移动语义
这是 cpp 网课学习笔记
左值和右值
引入
考虑这样一段代码
int n;n = 1;1 = n;
对于这段代码, 我们不难理解这是错误, 但是当我们思考错误的原因, 可以发现这并不简单
为什么 1 = n; 会报错而 n = 1; 却是合法的呢?
观察编译器给出的报错提示 表达式必须是可修改的左值, 一个全新的概念出现了–左值(lvalue)
表达式的值的类型
与 1 = n; 类似的语句还有很多, 例如 int foo(); foo() = 3;, int m; m + 3 = 4; 等等, 这些语句的出现似乎在提示我们一个很简单的道理, 一个你的 C 语言启蒙老师大概率和你讲过的话:
C 语言里面的表达式不是方程
正因如此, 我们就能理解下面这句话了
即便变量类型相同, 依然存在某些表达式是不能被赋值的
那么那些无法赋值的表达式到底有什么特征呢?
很简单, n 表征一个对象, 在物理意义上表征着内存中的某一块; 而 1 不表征一个实在的对象, 也就是说, 他表征着一个不与对象关联的值, 也就是字面量
回到形如 foo() = 3;, m + 3 = ...
CSS进阶实战 | 一些实例
记录一点CSS学习心得
参考资料
RUNOOB-CSS教程
W3C-CSS教程
前言
想要高效快捷的学习CSS,你需要:
VSCode, with following extensions
Color Highlight | 颜色显示
Live Server | html热预览
前置知识
熟练的html
入门的JavaScript
辅助工具/网站
配色参考
图片素材
优秀的榜样网站
信息搜索能力
一些小创意和小自信
tip: 阅读本文之前, 最好对选择器有一定的了解, 或先阅读上一篇文章
首字母大大大大写
利用伪类:first-letter, 我们可以单独对第 1 个字符设置属性
实例代码
<!DOCTYPE html><html> <head> <meta charset="utf-8"> <style> p:first-letter{ color:#ff0000; & ...
大学物理(乙)I
基本信息
授课教师: sc, wz
建议参考笔记
https://savia7582.github.io/Exterior/Physics/1/