文档请戳右边栏的Wiki按钮(就是那本小书)。
欢迎吐槽,当然吐槽之余请把它顺手改得好一点,谢谢 :)
BM算法在开始时要进行预处理,即要对字母表中的每一个字符计算“坏字符”的移动距离,那在处理ASCII的时候还好说,可是GB2312或者Unicode的情形怎么办?
今天上机课上提到头文件错误,应该在题目发布前处理。以后争取再发布作业之前先找人做一遍。
以下是TA的参考代码
在TA/assignment1/ArrayListBase & ArrayListWithIterator下。
(建议同学们写好自己的代码之后再查看):
#65 这边有一些comment最好扫一遍。
因为代码上不能直接评论,所以评论移步pull request上。
https://github.com/ds-sww/codebase/pull/65/files
欢迎指出错误~>_<
请同学们更新一下,助教更新了.gitignore 文件
如果类需要析构函数,则它也需要赋值操作符号,和复制构造函数
合成的赋值构造和复制构造函数都是 逐个成员赋值 当是指针的时候会有错误。
这个是TA在看书的时候发现的, TA的实现也是错误的。
#include<iostream>
#include<cstdio>
using namespace std;
class Array {
private :
int * data;
public :
Array() {
cout << "In Array()" << endl;
data = new int[10];
}
~Array() {
cout << "In ~Array()" << endl;
delete [] data;
}
};
int main() {
Array array;
Array array2 = array;
return 0;
}
输出:
In Array()
In ~Array()
In ~Array()
Main(26559,0x7fff7d5f1310) malloc: *** error for object 0x7fc23b403960: pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
make: *** [run] Abort trap: 6
原因就是,array2=array
这里用了合成的默认的赋值构造函数。
指针被复制过去,但是内容并没有被复制,两个类共享了一块空间。但是被析构了两次。
所有调用均是返回值而不是引用,传入全部使用pass by value而不是pass by ref.
能不能不要把C++写成java……
然后显式释放iter是啥意思没有看懂……只能同时获得一个iter?
然后我把Iterator的hasNext实现为return false就能通过全部的测试? 好像很厉害!
UPDATE1: 为啥Iterable的实现是返回一个iterator的指针?
不用自己释放指针,是不是可以这样?
新增一个类来存放一个迭代器的数组,然后外面每次申请迭代器的时候就将其中第一个闲置的迭代器初始化一下然后传个指针出去,不需要的时候收回来。感觉就和程序设计课里,自己预先申请一个数组,然后从这个数组里alloc和free的那种想法差不多。
至于怎么判定“不需要”一个迭代器,则可以在新增的这个类里设计引用计数来实现,追踪每一个迭代器的引用计数,到零时就收回,省去了手动释放的过程。但为了配合引用计数,可能需要重载一些符号(比如 =)。
大家觉得这样可行吗?
TA希望构建一个这样的氛围
0. 玩得开心
这需要同学们
有一点我想指出来: 我们在创造
不知道你们体会我的心情么,不知道你们曾有过,或者将来可能有我这样的想法。
之前某天的某门课,当我在用MIT或其他学校的其他人设计的实验or Assignment。我曾想过“复旦人自己设计得出来么?”
所以想想我们即将要做的事情, TA的兴奋之情你们体会到了么?
对于我本人来说,我希望在课程结束后,我可以拍拍自己胸脯说自己创造了一些价值。
对于你们来说
TA就是喜欢bibi。扯一堆dan。
Anyway, Have fun and good luck, everybody!
在Review的过程中,发现不用branch是不行的。
如果TA事先想到了,不会有这次问题。
不过希望同学们把这次麻烦, 当作一次实践git的机会吧。
现在建议同学们:
在做一个新的assignmentX 的时候
git branch assignmentX
git checkout assignmentX
git push origin assignmentX
Git 想关概念和用法,请自行脑补。
把TA的代码一起提交的同学
提交了错误的文件(比如gitignore) 或
现在已经几个Assignment,并且混在一起的同学注意
分两次提交pull request
另: Pull request
标题格式 学号_姓名_assignment
example 11300240057_CHENWEIDONG_assignment0
文件目录按照src/ testcase/划分
src/为你们源代码的根目录。
请同学们该完代码之后修改一下文件头部的署名啊。亲.
尊重自己的劳动成果
Add HelloWorld.cpp
讨论问题~~
RT
下面列出一些我感觉值得大家都看一下的提交。
因为review断断续续, 到后面才想起来要整理一下。
所以肯定遗漏了很多。 同学有看到遗漏的也请补充
排序后求L,R数组O(N log n) https://github.com/GhSapGu/codebase/blob/06dab76509a6511bd8e5def121416bab37ea021b/13307130199/assignmnet4/src/2.cpp
值得关注一下字符串的数据生成器
#230
哨兵:
ihciah@dbed41c
https://education.github.com/pack
Micro account (normally $7/month) with five private repositories while you're a student
绑定一下自己的学号邮箱可以免费拿两年
Student Developer Pack
还有其他的一些东西。 其中有Digital Ocean的优惠。详细自己看吧 ,感觉很不错!
里面有个视频,讲老外怎么把Github用到教学中。
https://education.github.com/stories#UCBerkeley
RT.. 否则要怎么将被fork的项目的最新更新同步到fork的项目呢? 0.0
到目前为止,很少有同学在提交的Assignment加了自己的测试
我想有几个原因:
代码质量,可读性和写测试。我也是到了公司之后才逐渐训练出这样的意识。 反过来,我希望我在大二的时候有人告诉我应该这样写代码。所以和同学们分享。
When confronted with the choice of being good or doing the easy thing, we often choose the easy thing because, well, it’s easier.
现在的我看来, 写一个程序的时间分成三部分。顺序上也大致如此,当然可能一边写测试还回过头来修改设计, 写代码的时候,回头来修改测试。
诚然在我们的课程里最强调的是设计代码和写代码。
更甚,有人说写代码的能力(这里指用C++的能力)应该在大一程设学习。我们的数据结构课程应该只关心设计代码。 写测试是不着边际的东西
我觉得这个说法有一些道理
我更觉得习惯是慢慢养成的,CS和数学不同,是理论和实践结合更紧密的学科。这几个部分互相促进。写出良好的实现有助于对算法的理解。自己去思考的数据fail掉自己或其他人的代码,是从非设计的角度来理解数据结构。
Programming is a craft more than it is a science. To write clean code, you must first write dirty code and then clean it
测试在这个 持续维护代码
过程中起的作用:
设想一下,如果是你在开发STL,那么对于vector这么重要的组件,写上百个测试都不为过,时间+空间等等都应该涵盖。(当然我不是说我们应该这么做)
不会强制要求大家做这样一件事,只是因为TA觉得它是有益的,所以提倡大家这么做。
不同的情形下对测试的要求不同。有一点很显然的是写测试非常花时间。
作为课程作业来讲,一般情况是不会有人重用你的代码的(除了你),也不是一个要维护好几年的工程。所以测试的意义没那么大。
但是我觉得写测试是程序员的基本素养。 设想你建了一座桥,而没有做压力测试就交工了是对的事情么?
比方现在的我们是在学建桥, 如果我们这个时候不养成这个习惯,到了那个上阵自然就会了么?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.