01 2017 档案
摘要:python安装很简单,没有什么要注意的地方。 唯一要考虑的是,2.x版本和3.x版本。据说是改动太大,最好只能独立维护。不过初学者嘛,最好还是用新版本的了。 1.单引号,双引号,三个双引号是等价的。 2.串联字符串,可以用+,也可以不用,直接写出来就行了 3.字符串格式说明符%s ...
阅读全文
摘要:进程: 普通进程和系统进程, 连接: 进程之间可以相互连接。如果AB两个进程连接,A挂了的时候,会想B发送一个错误信号。 连接组: 进程P的连接组是芝P相连的一组进程。 监视: 监视和连接很相似,但是单向的。 消息和错误信号: 进程协作的方式是交换消息或错误信号。 错误信号的接收: {'EXIT...
阅读全文
摘要:erlang的进程是指虚拟机管理的进程,而不是操作系统的重量级进程。 这些进程,创建和销毁都非常迅速; 进程之间发送消息非常快速; 进程在所有的操作系统上都具有相同的行为方式; 可以拥有大量的进程; 进程不共享任何内存,是完全独立的; 进程唯一的交互方式就是消息传递。 Pid = spawn(...
阅读全文
摘要:在Erlang中我们可以通过type及spec定义数据类型及函数原型。 通过这些信息,我们对函数及调用进行静态检测,从而发现一些代码中问题。 同时,这些信息也便于他人了解函数接口,也可以用来生成文档。 Type :: any() %% 最顶层类型,表示任意的Erlang te...
阅读全文
摘要:1. apply apply(Mod, Func, [Arg1, Arg2, ..., ArgN]) 等价于 Mod:Func(Arg1, Arg2, ..., ArgN) 区别在于,使用apply,Mod和Func是可以算出来的。 不推荐使用apply,许多分析工具都无法得知发生了什么,编译器...
阅读全文
摘要:大多数情况下,二进制型里的位数都会是8的整数倍,因此对应一个字节串。 如果位数不是8的整数倍,就称这段数据为位串。 二进制型的编写和打印形式是双小于号和双大于号之间的一列整数或字符串 2> >.>3> >.> 操作二进制型 binary模块 list_to_binary(L)->B 把io列表(...
阅读全文
摘要:显式生成错误的方法: exit(Why) 广播一个信号给当前进程链接的所有进程。throw(Why) 抛出一个调用者可能想要捕捉的异常错误。error(Why) 指示奔溃性错误,非常严重的错误。 捕捉错误,try...catch try FuncOrExpressionSeq of Patt...
阅读全文
摘要:记录record: 是元组的另一种形式 -record(Name, { key1 = Default1, key2 = Default2, ... key3, ... }).记录比较像C++的结构和类。 .hrl有点想C++的.h文件 test.hrl -re...
阅读全文
摘要:控制结构,其实可以分成两种,一种是循环,另一种是选择分支。 1.for循环的实现 for(Max, Max, F)->[F(Max)]; for(I, Max, F)->[F(I)|for(I+1, Max, F)].在Erlang Shell里面声明这个for()函数会报错,...
阅读全文
摘要:1.创建模块和调用函数: 模块是erlang的基本单元。 模块保存在扩展名为.erl的文件里。必须先编译才能运行,编译后的模块以.beam作为扩展名。 子句没有返回语句,则最后一条表达式的值就是返回值。 -module(geometry). %模块声明,模块名必须与文件名相同。-export([...
阅读全文
摘要:1.初步尝试控制台的操作。输入 1> a = 20结果没反应。。。 后来发现erlang的语句是以.号来结尾的。改改: 1> a = 20.** exception error: no match of right hand side value 20报错了,与右边的值不匹配。在研究一下。 er...
阅读全文
摘要:看了《Erlang程序设计》的开头两章,觉得跟第一版的果然很不同。而且是正版的电子版,文字版的,不是图片。 Erlang是面向并发的语言,它可以创建数以万计的进程来执行程序。 当然这些进程是由Erlang虚拟机管理的轻量级进程,而不是操作系统的进程。 对照C++,Java这些面向对象的语言来看。...
阅读全文
摘要:最近做的也有项目失败了,新的项目可能要用erlang。就尽管研究一下吧。 把别人的教程和自己遇到的困难写一下,可能理解得更好。 因为我之前写的C++比较多,所以这将要不断地跟C++来比较,才能更好地把握语言的本质,否则只是一个写业务的,好像erlang新手工资还比C++低。 1.网上找到了一...
阅读全文
摘要://自己常用的 LOAD DATA LOCAL INFILE 'D:/2015-03-19/t_active.txt' INTO TABLE t_active;//load txt文件 //其他 一、基础 1、说明:创建数据库 CREATE DATABASE database-name...
阅读全文
摘要:C++标准库的内容总共在50个标准头文件中定义。 在C++开发中,要尽可能地利用标准库完成。 这样做的直接好处包括: (1)成本:已经作为标准提供,何苦再花费时间、人力重新开发呢; (2)质量:标准库的都是经过严格测试的,正确性有保证; (3)效率:关于人的效率已经体现在成本中了,关于代码的执行...
阅读全文
摘要:应该是最简单的排序了,看代码就行了 //冒泡排序 template void bubbleSort(Vector& a) { int i, j, temp; for (j = 0; j a[i + 1]) { std::swap(a[i], a[i + 1]); } ...
阅读全文
摘要:排序的过程中,经常要交互数据,尤其是对于C++这种语言,交互两个比较大的对象,是很耗时间的。 如果只是交互两个对象的指针,就会快很多了。 间接排序的关键是排序后,怎样才能按指针的顺序,摆好数组的位置。 其中核心的排序算法,是使用了快速排序 //------------间接排序---------...
阅读全文
摘要:使用类似快速排序的方法,找出第k小的元素。 k从0开始的。 使用了快速排序的部分函数 快速排序 //快速选择 template Comparable& quickSelect(vector& a, int left, int right, int k) { ...
阅读全文
摘要:快速排序(quicksort)是在实践中最快的已知排序算法。 平均运行时间是O(NlogN),最坏的情形是O(N^2) 算法之所以特别快,主要是由于非常精炼和高度优化的内部循环。 1.如果S中元素个数是0或1,则返回 2.取S中任一元素v,成为枢纽元(pivot) 3.将S-{v}(S中其余元素...
阅读全文
摘要:归并排序: 最坏情形是O(NlogN) 使用的比较次数几乎是最优的。 这个算法中基本操作是合并两个已排序的表。 归并排序通过递归,将数组自身分拆成2个数组,然后进入子数组的排序。 分拆的数组左右两个,必须是紧跟着的。 虽然归并排序的运行时间是O(NlogN),但是很难用于主存排序,主要问题在于合...
阅读全文
摘要:基本原理就是构建一个堆,然后删除根。 为了不用一个新的堆,把抽取出来的数据,放在堆末尾。 所以,要实现一个升序排序,就要构建一个最大堆,不停抽取最大数,放到末尾处。 //----------------堆排序-------------------- template void heapsor...
阅读全文
摘要:谢尔排序也叫缩减增量排序。 谢尔排序使用一个序列h1,h2,···,ht,叫做增量序列。有些增量序列对排序效率起到更好的效果。 template void shellSort(Vector& a) { for (int gap = a.size() / 2; gap > 0; gap /= ...
阅读全文
摘要:插入排序是最简单的排序算法之一。 插入排序由N-1趟(pass)排序组成。对于p = 1到N - 1趟,插入排序保证位置0到位置P上的元素为已排序状态。 //插入排序 template void insertionSort(Vector& a) { int j; for (int p = 1...
阅读全文
摘要:堆是一棵被完全填满的二叉树。底层可以例外。也成为完全二叉树。 因为完全二叉树很有规律,所以可以用一个数组表示而不需要使用链。 对于任一个位置i上的元素,左儿子在2i上,右儿子在2i+1上。其父亲在i/2上。 堆的某个结点,必须必它的子孙结点都小,所以堆是完全二叉树,但是完全二叉树不一定是堆。 /...
阅读全文
摘要:上一章的内容:散列1:分离链接法 对于List和Vector,都是使用自己实现的简单模板。Vector模板的实现 List模板的实现 散列表的填装因子(load factor)λ为散列表中的元素个数和散列表大小的比值。 探测散列表:在找到位置后,发现已经有数据,继续找下一个,直到找到位置。...
阅读全文
摘要:散列: 将每个键映射到从0到TableSize-1这个范围的某个数,并将其放到适当的单元中。这个映射成为散列函数 理想情况下,不同的键映射到不同的单元,但是现实中是不可能的,所以好的散列函数,应该尽量均匀地分配键。 列表的大小最好是素数,这个非常非常重要。 解决冲突: 冲突:如果一个元素插入...
阅读全文
摘要:伸展树(splay tree):也叫分裂树,当一个结点被访问后,它就要经过一系列AVL树的旋转被推到根上。 M叉树:可以有M路分支,高度大约是logmN B树:经过M叉树的多次变种和改进。有如下特性: 1.数据项存储在树叶上 2.非叶结点存储知道M-1个键,以指示搜索的方向;键i代表子树...
阅读全文
摘要:AVL树是每个结点的左子树和右子树的高度最多差1的二叉查找树。 要维持这个树,必须在插入和删除的时候都检测是否出现破坏树结构的情况。然后立刻进行调整。 看了好久,网上各种各种的AVL树,千奇百怪。 关键是要理解插入的时候旋转的概念。 //// AvlTree.h// HelloWorld//...
阅读全文
摘要:一些概念: 一棵树是一些结点的集合。这个集合可以是空集,若不是空集,则树由称作根(root)的结点r以及零个或多个非空的(子)树T1,T2...Ta组成,子树中每一个棵的根都被来自根r的一条有向的边(edge)所连接。 每一棵子树的根叫做根r的儿子(child),而r是每一棵子树的根的父亲(pa...
阅读全文
摘要:队列Queue是先进进出FIFO和后进后出LILO的。 只能从队尾放入数据,从对头删除数据。 跟Stack一样,我也写了两个版本,但是跟Stack还是有所不同的。 用List实现的队列,是没有大小限制的, 用Vector实现的队列,是有大小限制的,其实更加复制,很多地方要注意的。使用循环列表的方...
阅读全文
摘要:栈的主要特点是LIFO,后进先出。 只能访问栈顶。 可以使用数组或者链表来实现。 所以写了两个版本的实现。 其实,从代码的角度看,直接使用List是最简单的,但是从效率的角度看,使用vector更加高效一点。 对于List和Vector,都是使用自己实现的简单模板。Vector模板的实现 Lis...
阅读全文
摘要:跟Vector一样,我自己也写了一个简单的List来进行研究。 这里实现的是双向链表,因为双向链表包含了单向链表的所以功能,所以就没有单独写一个了。 这个双向链表的实现,在创建的时候,就已经有了两个节点,分别是head和tail。这是抽离出来,不存放数据的节点,是为了让程序简化,被称为哨兵节点。...
阅读全文
摘要:问题: 今天研究数据结构,按着书敲代码,发现子类中直接调用父类成员居然无法通过编译。 看了好久都没发现问题,尝试将父类private属性改为public,发现也是不行。 解决办法: 然后我想着用域作用符,居然可以。 在网上搜了一下,发现用this指针,也是可以解决这个问题的。 //// Lis...
阅读全文
摘要:Vector是比较常用的结构,在C++的STL中就有了vector的实现,在头文件中可以看到。 但是STL的实现就像一个超级大的蛋糕,我们不可能一口一口地吃下去。最好的办法是从基础的思想开始,自己跟着写一个简单版本的Vector。 vector究竟是什么? 其实本质上就是数组,只是经过封装后,可...
阅读全文
摘要:本来是写在《C++ primer plus》总结里面的,但是想想又觉得那个是知识性总结,于是把这些内容抽出来了。 感悟: 一开始的时候,只是想补充一下基础,因为确实没有系统地学过C++的东西,很多细节都不清楚。 但是随着学习,发现很多地方,跟其他语言都是想通的,就连之前一直觉得其他语言有的,...
阅读全文
摘要:总结: 我是总结完下面的列表,才再回来写总结的,现在看来,这本书的排版还是不错的,由浅入深,很有规律。 其实,一开始我是想看《C++ primer》的,看的是电子版,同学发给我的。结果看了几章后发现是山寨的。 不过最后还是看完了。我没有看过多少其他的C++的书。不知道这本书好不好。 但是作为一个...
阅读全文
摘要:非修改性序列操作 all_of() 如果所有元素的谓词测试都为true,则返回true,C++11 any_of() 只要有一个谓词测试为true,返回true,C++11 none_of() 如果所有测试都为false,则返回false,C++11 for_each(...
阅读全文
摘要:18.12 编程练习 1.下面是一个简短程序的一部分: int main(int argc, char* argv[]){ auto q = average_list({ 15.4, 10.7, 9.0 }); cout ({ 'A', 70, 65.33 }); cout #includ...
阅读全文
摘要:18.11 复习题 1.使用大括号括起的初始化列表语法重写下述代码。重写后的代码不应使用数组ar: class Z200{private: int j; char ch; double z;public: Z200(int jv, char chv, double zv) : j(jv), ch...
阅读全文
摘要:本章主要讲: 移动语义和右值引用 Lambda表达式 包装器模板function 可变参数模板 1.C++11新类型 long long unsigned long long char16_t char32_t 2.扩大初始化列表的适用范围 3.声明 auto 自动类型识别 decl...
阅读全文
摘要:重点:文件读写,二进制文件读写, 题目好长,分多一张 6.考虑14章的编程练习5中的类定义。如果还没有完成这个练习,请现在就做,然后完成下面的任务。 编写一个程序,它使用标准C++I/O、文件I/O以及14章的变成练习5中定义的employee、manager、fink和highfink类型...
阅读全文
摘要:17.8 编程练习 1.编写一个程序计算输入流中第一个$之前的字符数目,并将$留在输入流中。 // // main.cpp // HelloWorld // // Created by feiyin001 on 16/12/30. // Copyright (c) 2016年 ...
阅读全文
摘要:17.7复习题 1.iostream文件在C++I/O中扮演何种角色? iostream定义了用于管理输入和输出的类、常量和操作符,这些对象管理用于处理I/O的流和缓冲区。 该文件还创建了一些标准对象(cin、cout、cerr和clog以及对应的宽字符对象),用于处理与每个程序相连的标准输...
阅读全文
摘要:要点:输入流 1.流状态 ---------------------------------------------------------------------------------------------------------------------------------------...
阅读全文
摘要:1.流充当了程序和流源和流目标之间的桥梁。 C++只检查字节流,而不需知道字节来自何方。 C++没有将输入输出建立在语言中,而是让编译器实现的。 2.使用缓冲区可以更高效地处理输入和输出。 3.streambuf类为缓冲区提供了内存,并提供了用于填充缓冲区、访问缓冲区内容、刷新缓冲区和管...
阅读全文
摘要:16.10 编程练习 6.使用STL queue模板类而不是第12章的Queue类,重新编写程序清单12.12所示的示例。 程序清单12.12: Test.h // // Test.h // HelloWorld // // Created by feiyin001 on 16/1...
阅读全文
摘要:16.10 编程练习 1.回文指的是顺着读和逆着读都一样的字符串。假如,“tot"和“otto”都是简短的回文。编写一个程序,让用户输入字符串,并将字符串引用传递给一个bool函数。如果字符串是回文,该函数将返回true,否则返回false。此时,不要担心诸如大小写、空格和标点符号这些复杂的问题...
阅读全文
摘要:1.考虑下面的类声明: class RQ1 { private: char* st; public: RQ1() { st = new char[1]; strcpy(st, "")...
阅读全文

浙公网安备 33010602011771号