- 博客(22)
- 收藏
- 关注

原创 强化学习笔记
本文(不断更新)是学习以下课程/文献的笔记:课程:UCL Cource on RL http://www0.cs.ucl.ac.uk/staff/D.Silver/web/Teaching.html课程:Berkeley cs188 http://inst.eecs.berkeley.edu/~cs188/fa18/书籍:Algorithms for Reinforcement learn...
2019-01-25 00:01:03
571
原创 排序算法
冒泡排序(bubble sort)void bubble_sort(vector<int>& list){ int size = list.size(); for (int i = 0; i < size; ++i) //for each loop of i, the largest element is put in list[size-i-1] for...
2019-06-30 21:22:16
159
原创 valgrind检查内存泄露
c++没有垃圾回收机制,程序往往会出现内存泄露,即从堆上获取资源(malloc/new)、用完后没有返回(free/delete)给系统。valgrind是一个检测内存泄露的工具。安装sudo apt-get install valgrind使用写一个产生内存泄露的代码,名为leak1.cpp//leak1.cpp#include <cstdlib>using nam...
2019-06-05 22:33:46
2959
原创 分布式初探
Why 分布式系统?分布式系统(Distributed system)是相对集中式系统来讲的。集中式就是所有程序都运行在一个机器上。在这种情况下,当程序和数据变得越来越多、越来越大时,单个机器就得提高性能和存储容量,比如增加CPU核数和增加存储空间。但是在一个机器上扩展性能会有两个问题:一是这个机器任何一个部件(硬件或软件bug)坏掉整个系统就崩溃,没有冗余性;二是单个机器的性能扩展总会有...
2019-04-30 00:28:16
243
原创 python变量下划线小结
一个python脚本,比如 hello.py,就是一个模块,这个模块的名字叫hello;一个模块既可以被其它模块导入(importable),也可以被直接执行(executable).__name__是python的内置变量。如果一个模块是被直接执行的话,那么这个模块的__name__变量的值就是 __main__值;而如果这个模块是被其它模块导入的,那么这个模块的__name__变量的值就是模...
2019-02-12 20:45:17
3815
原创 二叉树(binary tree)相关算法总结
一个二叉树的节点定义为:struct TreeNode{ int val; TreeNode* left; TreeNode* right; TreeNode(int v): val(v), left(nullptr), right(nullptr){}};1. 二叉树简单算法- 将新节点newNode插入节点parent下方作为其左子void insertNode(Tree...
2019-01-20 15:50:16
487
原创 类型转换
c++中数据类型转换主要是隐式转换和显式转换两种隐式转换(implicit type conversion)double a = 3; //把int型转换成double型int b = 3.2; //把float型转换成int型cout << b; //输出3,因为float型转成int型会丢失精度强制转换(explicit type conversion / cas...
2019-01-08 22:56:51
233
原创 STL容器特点对比
1. 分类序列式容器(sequential container)vector, list, array, deque, forward_list关联式容器(associative container)map, multimap, set, multiset, unordered_map, unordered_multimap, unordered_set, unordered_multi...
2018-12-28 11:43:16
1299
原创 c++ explicit关键字
考虑以下代码:class A{private: int a;public: A(int i):a(i){}};int main(){ A a1 = 1; //OK return 0;}上面main中1是内置的int型,但是编译器把它隐式地转化成了A类型,因为刚好A的构造函数只有一个参数且该参数为int型。这看起来很方便,但有时却可能带来不想要的结果,如下例:cla...
2018-12-26 17:21:12
115
原创 c++11匿名函数Lambda
定义一个lambda函数:auto f = [capture](params)opt->ret{body;} ;f(); //调用函数其中:capture表示捕获函数作用域外的外部变量params是参数(非必须)opt是函数选项,例如可选择是否允许更改capture到的外部变量ret表示函数返回类型,一般可以免了,因为我们在f前面用了autobody是函数体例子:i...
2018-12-26 16:36:06
158
原创 c++类的访问权限
类成员访问权限class Base{private: int a;public: int b; void foo() { cout << a << b << d << endl; //OK: 类体内可以访问任何private、public、protected成员 }protected:...
2018-12-26 15:21:32
3280
原创 c++函数重载(overload)和覆盖(override)
重载(overload)函数名相同,参数类型、数量、顺序、返回类型中有一个以上不同:int add(int a, int b){return a + b;}double add(double a, double b) {return a + b;} //重载add函数覆盖(override)这是类的虚函数相关的概念。基类中的虚函数被派生类重新定义,即为覆盖。基类和派生类中发生覆盖的虚函...
2018-12-26 14:50:02
354
原创 c++ const关键字
const的作用包括:修饰常量cont int i = 2;i = 3; //错误相比于#define常量,const修饰的常量能够进行类型安全检查,而#define只是纯文本替换。const与指针const int *ptr; //指针所指的内容是常量int* const ptr; //指针本身是常量const int* const ptr; //指针本身、指针所指的内...
2018-12-26 14:35:26
110
原创 c/c++ static关键字
c的static作用修饰静态局部变量void foo(){ static int s_var = 0; s_var++; cout << s_var << endl;}int main(){ foo(); //输出:1 foo(); //输出:2,因为上面foo()介绍之后,s_var并没有被释放,所以再调用一次fo...
2018-12-26 13:54:51
171
原创 进程和线程的基本概念
一个进程(process)就是会独立地拥有系统资源(CPU,内存)的程序,两个进程之间相互不影响,例如excel和word就是两个进程。而线程(thread)是指处理器每个时间内最小的执行单位,例如excel中一个add()函数就是一个线程。一般而言,一个进程包含一个或一个以上线程。当软件程序(也是进程)数量多于处理器数量,而所有程序“看起来”能够同时运行,是因为处理器可以在ns/ms时间内计...
2018-12-25 22:53:48
367
原创 c/c++内存分区
c++的内存分区有常见的五种:栈存储局部变量、函数参数等,由编译器自动分配和回收。结构上相当于数据结构中的栈;速度快(有计算机底层数据结构支持)但容量有限(1~2M)。例如:MyClass c1;这样的类实例c1就是在栈上。堆由程序员手动分配内存和回收,结构上相当于数据结构中的链表;容量大(几G)但速度慢。由于需要手动分配、释放内存因此增加了内存管理的难度。例如:MyC...
2018-12-25 22:03:15
262
原创 虚函数
多态和虚函数考虑有一个animal基类和一个派生类cat:class Animal{public: void say() { cout << "animal words" << endl; }};class Cat : public Animal{public: void say() { ...
2018-12-25 20:47:39
155
原创 C/C++的extern关键字
比如这是我的myExtern.cpp文件,只有一行代码:int ex = 3;然后这是我的main.cpp:#include <iostream>using namespace std;int main(){ cout << ex << endl; //显然这里会报错:ex没定义}如果我在main中加extern关键字:#inc...
2018-12-25 19:44:37
192
原创 编译过程
一个.c源代码到可执行程序要经历以下过程:预处理(preprocess)这一步主要是修改中以"#"开头的代码,例如#include和#define等。这一步输出.i文件编译 (compile)编译过程将经过预处理的程序变成汇编语言程序——所谓汇编,是一种标准的文本格式描述一条低级机器指令。这一步输出.s文件汇编 (assembly)汇编器将程序翻译成计算机能读懂的机器语言指令,并且...
2018-12-25 19:27:46
143
原创 从智能指针、到move语义和右值引用
c++中,使用普通的指针可能会造成内存泄露,这可能是由于忘了delete,或者是程序提前return导致没法delete,例如:void foo(){ myClass* ptr = new myClass; if (true) return; delete ptr; //无效的delete,因为函数已经return}因此我们想,最好指针自己能够在不需要的时候就自动dele...
2018-12-15 23:36:14
1583
原创 c++深拷贝和浅拷贝
深拷贝、浅拷贝的问题出现在:当一个自定义类中出现指针成员时。考虑一个类myCopy:#include &amp;lt;iostream&amp;gt;using namespace std;class myCopy{private: int len; char * name;public: int len; char * name; myCopy(int l, char* n) {...
2018-12-02 23:39:10
148
原创 c/c++字符串
c风格字符串几种等效的初始化字符串的方法:char str0[6] = "hello"; //字符串就是字符数组,"[]”内的"6"表示初始数组长度char str1[] = "hello"; //"[]”内的数组长度可以不声明char str2[] = {'h', 'e', 'l', 'l', ...
2018-12-02 17:48:44
233
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人