运算符重载
Rational类
关键点:Rational是用来描述有理数的工具。
由于计算机对于浮点数存储机制的底层硬件局限,c++中的double无法准确的存储1/3,因此需要自定义Rational类来存储有理数,进行更加精确的运算。
另外,double类型可以表示的数据范围大于int类型,但是在精度上,double在表示大数时不如int类型。
运算符函数
关键点:运算符函数是类的成员函数,用于重载运算符。
指针及动态内存管理
动态持久内存分配
KEY POINT
new操作符可以在运行时为基本数据类型、数组和对象分配持久的内存空间。
另外,新版c++标准中可以用变量名称作为数组大小。
之前创建动态数组的方法
cout<<"Enter the size of the array: ";int size;cin>>size;int* list = new int[size];
就可以被替换为:
cout<<"Enter the size of the array: ";int size;cin>>size;int list[size];
创建及访问动态对象
关键点:调用对象的构造函数可以动态的创建对象,语法是 new ClassNmae(arguments)
可以使用如下的语句在堆中动态创建对象:
ClassName* pObject1 = new ClassName(); //这里使用无参构造函数创建对象,并将对象赋予指针pObject1ClassName* pObject2 = new ClassName(argumen ...
C++ STL 顺序性容器 vector
基本概念和介绍
vector和数组非常相似,不同的是数组所申请是静态空间,也就是说数组的长度在数组定义的时候就已经确定下来了,但是vector可以进行动态分配,随着元素的插入和删除,vector的长度也会随之改变。节省了空间。
#include<vector>
常见的操作
先说一下什么是API,API就是应用程序编程接口(Application Programming Interface),说得更加通俗易懂一些,别人编译好的程序,提供给你使用,就叫做API。你使用了别人代码(或者程序)中的某个函数、类、对象,就叫做使用了某个API。
有些函数,要传入的不仅是普通的参数,你还要传入对应的: 迭代器,所谓迭代器,就是一种泛化的指针,因为指针本身就是一种迭代器,像下面讲解的insert()函数中要传入的v.begin()就是一种迭代器,以及在PrintVector打印输出中,也需要使用到迭代器,此处不做过多详解;
void PrintVector(vector<int>& v){ for (auto x : v) { cout <& ...
C++ STL
C++ STL(标准模板库)是一套功能强大的 C++ 模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行和常用的算法和数据结构,如向量、链表、队列、栈。
组件
标题
容器(Containers)
容器是用来管理某一类对象的集合。C++ 提供了各种不同类型的容器,比如 deque、list、vector、map 等。
算法(Algorithms)
算法作用于容器。它们提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作。
迭代器(iterators)
迭代器用于遍历对象集合的元素。这些集合可能是容器,也可能是容器的子集。
这三个组件都带有丰富的预定义函数,帮助我们通过简单的方式处理复杂的任务。
Containers 容器
什么是容器
容器,是可以承载,包含元素的一个器件,可以理解为平时所用的容器,但是容器内装的是数据而不是固体或者液体。
STL中各大容器的结构与分类
顺序性容器
容器
说明
vector
可变大小数组。相当于数组,可动态构建,支持随机访问,无头插和尾插,仅支持inset插入,除尾部外的元素删 ...
台湾国立大学郭彦甫Matlab教程笔记(3)
Some tips:
在指令后面加";" 表示不显示运算结果
a=10;b=10
方向键↑可以将之前的command history调出来,↓也可以
clc:clear command window display
clear:removeb all variables in the workspace
who:variables in the workspace
whos:variable information of the workspace
到这里为止,基本上把MATLAB作为一个计算器的功能讲完了
接下来处理向量和矩阵
Array(Vector and Matrix)
Row vector:
>>a= [1 2 3 4]
Column vector:
>> b = [1;2;3;4]
Try:
>>a*b>>b*a
Key in the following matrix in MATLAB:
A=[121651793127]A=\begin{bmatrix}
1&21&6\\5 ...
台湾国立大学郭彦甫Matlab教程笔记(1)
台湾国立大学 郭彦甫Matlab教程
01教程简介
The primary aim of the course:
provide the students with the background and necessary experience(by ways of lots of practice)to use Matlab / write programs /solve engineering problems schedule
02:基本操作与矩阵输入
today:
*
introduction
*
Matlab as calculator
*
array operation,array是一个矩阵或者向量
Ready to launch?
介绍一下Matlab的界面:
1.current folder 当前的档案,就是当前的文件夹
2.command window 命令行窗口
3.workspace 工作区,存储virables,也就是变量
4.command history 这里是命令的历史区域
当然,默认的桌面布局并没有 command History,这里需要在布局 ...
台湾国立大学郭彦甫Matlab教程笔记(2)
log函数,就是 natural log
log10(x) common logarithm 以10为底的
log2(X) 是以2为底的。
elementary math functions基本数学函数
1.arithmetic 加减乘除
2.trigonometry 三角函数
3.exponents and logarithms 指数和对数函数
4.complex numbers 复数
5.cartesian coordinate system conversion
embedding functions 嵌套函数
1.functions may be embedded into other functions
sin(cos(pi))等价于ans=cos(pi),sin(ans)这种两阶段的形式
2.many lines of code can be condensed into one single command
variables变数
1.variables do not need to be declared before assignment
2.a single “eq ...
algorithm头文件函数全集——史上最全,最贴心
简介:
algorithm头文件是C++的标准算法库,它主要应用在容器上。 因为所有的算法都是通过迭代器进行操作的,所以算法的运算实际上是和具体的数据结构相分离的 ,也就是说,具有低耦合性。 因此,任何数据结构都能使用这套算法库,只要它具有相应的迭代器类型。
常用函数:
一、max()、min()、abs()函数
max():求两个数最大值
min():求两个数最小值
abs():求一个数的绝对值
代码:
#include<iostream>#include<algorithm>using namespace std;int main() { int a = 3, b = 4; //求最大值 int Max = max(a,b); //求最小值 int Min = min(a,b); //求绝对值 int Abs = abs(-3); cout << Max << Min << Abs; return 0; }
输出:433
注意:
1、max()和min()函数中的参数只能是两个,如果想求3个数的最大 ...
prim算法(普里姆算法)详解
prim算法(普里姆算法)详解
了解了什么是最小生成树后,本节为您讲解如何用普里姆(prim)算法查找连通网(带权的连通图)中的最小生成树。
普里姆算法查找最小生成树的过程,采用了贪心算法的思想。对于包含 N 个顶点的连通网,普里姆算法每次从连通网中找出一个权值最小的边,这样的操作重复 N-1 次,由 N-1 条权值最小的边组成的生成树就是最小生成树。
那么,如何找出 N-1 条权值最小的边呢?普里姆算法的实现思路是:
将连通网中的所有顶点分为两类(假设为 A 类和 B 类)。初始状态下,所有顶点位于 B 类;
选择任意一个顶点,将其从 B 类移动到 A 类;
从 B 类的所有顶点出发,找出一条连接着 A 类中的某个顶点且权值最小的边,将此边连接着的 A 类中的顶点移动到 B 类;
重复执行第 3 步,直至 B 类中的所有顶点全部移动到 A 类,恰好可以找到 N-1 条边。
举个例子,下图是一个连通网,使用普里姆算法查找最小生成树,需经历以下几个过程:
图 1 连通网
将图中的所有顶点分为 A 类和 B 类,初始状态下,A = {},B = {A, B, C, D, S, T}。
从 ...