codebase's Issues
Assignment1 TA's solution
今天上机课上提到头文件错误,应该在题目发布前处理。以后争取再发布作业之前先找人做一遍。
- 现在因为已经有同学拷贝到自己的目录去了。我没有办法push过去。
- 同学们知道有这么一个错,自己思考一下,为什么那样的头文件不好。自己进行修改
- 改好后看一下TA的参考代码。
以下是TA的参考代码
在TA/assignment1/ArrayListBase & ArrayListWithIterator下。
(建议同学们写好自己的代码之后再查看):
#65 这边有一些comment最好扫一遍。
因为代码上不能直接评论,所以评论移步pull request上。
https://github.com/ds-sww/codebase/pull/65/files
欢迎指出错误~>_<
关于BM算法的一点问题
BM算法在开始时要进行预处理,即要对字母表中的每一个字符计算“坏字符”的移动距离,那在处理ASCII的时候还好说,可是GB2312或者Unicode的情形怎么办?
Rule of Three.
如果类需要析构函数,则它也需要赋值操作符号,和复制构造函数
合成的赋值构造和复制构造函数都是 逐个成员赋值 当是指针的时候会有错误。
这个是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
这里用了合成的默认的赋值构造函数。
指针被复制过去,但是内容并没有被复制,两个类共享了一块空间。但是被析构了两次。
Assignment 1 issue
所有调用均是返回值而不是引用,传入全部使用pass by value而不是pass by ref.
能不能不要把C++写成java……
然后显式释放iter是啥意思没有看懂……只能同时获得一个iter?
然后我把Iterator的hasNext实现为return false就能通过全部的测试? 好像很厉害!
UPDATE1: 为啥Iterable的实现是返回一个iterator的指针?
Assignment4 值得关注的提交
下面列出一些我感觉值得大家都看一下的提交。
因为review断断续续, 到后面才想起来要整理一下。
所以肯定遗漏了很多。 同学有看到遗漏的也请补充
排序后求L,R数组O(N log n) https://github.com/GhSapGu/codebase/blob/06dab76509a6511bd8e5def121416bab37ea021b/13307130199/assignmnet4/src/2.cpp
值得关注一下字符串的数据生成器
#230
哨兵:
ihciah@dbed41c
与课程仓库同步
- 添加课程仓库 git remote add ds-sww https://github.com/ds-sww/codebase.git
- 拉到本地 git pull ds-sww master
- cheers
请同学们更新一下,助教更新了.gitignore 文件
为什么不用引用
RT
Assignment 2 题目
Share
- g++ 和 gcc有什么不同? TA不会用C++。这是我问自己的问题。
- 强烈推荐大家想办法用google, work around solution: www.gfsoso.com
- yifu同学重载操作符的写法值得借鉴,相关文章 Fluent Interface
TA说(抛砖引玉)
TA希望构建一个这样的氛围
0. 玩得开心
- 分享
- 交流
- 互助
这需要同学们
- 积极Review其他同学代码,给高质量的评论
- 持续 改进自己代码,几乎写不出没有问题的代码, 这么说吧,大家看看自己去年写的代码,什么感觉?
- 提问题和解答。在Issues中提出经过自己的思考的问题。给出经过思考的回答。
- 贡献自己的能力,为我们的课程项目做贡献
有一点我想指出来: 我们在创造
不知道你们体会我的心情么,不知道你们曾有过,或者将来可能有我这样的想法。
之前某天的某门课,当我在用MIT或其他学校的其他人设计的实验or Assignment。我曾想过“复旦人自己设计得出来么?”
所以想想我们即将要做的事情, TA的兴奋之情你们体会到了么?
对于我本人来说,我希望在课程结束后,我可以拍拍自己胸脯说自己创造了一些价值。
对于你们来说
- 大家玩得开心,大家能喜欢计算机这个专业。这是个很艰巨的任务,但是我想至少要能给大家正面的影响。
- 这是一门数据结构课程, 我会尽力最好Assignment的设计,帮助大家提高专业能力。
- 我希望大家能感受到和我一样的兴奋之情!这是很赞的。
TA就是喜欢bibi。扯一堆dan。
Anyway, Have fun and good luck, everybody!
不用自己释放指针,是不是可以这样?
不用自己释放指针,是不是可以这样?
新增一个类来存放一个迭代器的数组,然后外面每次申请迭代器的时候就将其中第一个闲置的迭代器初始化一下然后传个指针出去,不需要的时候收回来。感觉就和程序设计课里,自己预先申请一个数组,然后从这个数组里alloc和free的那种想法差不多。
至于怎么判定“不需要”一个迭代器,则可以在新增的这个类里设计引用计数来实现,追踪每一个迭代器的引用计数,到零时就收回,省去了手动释放的过程。但为了配合引用计数,可能需要重载一些符号(比如 =)。
大家觉得这样可行吗?
为什么需要测试
现状
到目前为止,很少有同学在提交的Assignment加了自己的测试
我想有几个原因:
- 一方面因为Assignment1的确没有想到很多边角和情况需要考虑(我坚信我们这么多人的代码肯定有没测试出来的bug)。 之后的assignment会越来越多的需要测试。
- Assignment1代码量很小,不需要很严肃的测试。
- 另一方面大家可能还没意识到测试的重要性。针对这点我写了这个Issue
我们都是懒人
代码质量,可读性和写测试。我也是到了公司之后才逐渐训练出这样的意识。 反过来,我希望我在大二的时候有人告诉我应该这样写代码。所以和同学们分享。
When confronted with the choice of being good or doing the easy thing, we often choose the easy thing because, well, it’s easier.
写代码的步骤
现在的我看来, 写一个程序的时间分成三部分。顺序上也大致如此,当然可能一边写测试还回过头来修改设计, 写代码的时候,回头来修改测试。
- 30% 设计代码
- 50% 写测试
- 20% 写代码
诚然在我们的课程里最强调的是设计代码和写代码。
更甚,有人说写代码的能力(这里指用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
测试在这个 持续维护代码
过程中起的作用:
- 帮助你思考, 测试从使用的角度来观察设计的数据结构
- 让你放心修改代码,比如, 你觉得某一段可以写得更简洁或者更有效率,有测试在,你会有信心自己改对了。 当代码超过200行。 没有自动化的测试,很容易瞻前顾后,不敢对旧的代码进行改动。
- 测试代码有文档的作用。 我甚至觉得其实我布置Assignment把,头文件和测试文件给大家。大家就基本上知道要做什么了。
设想一下,如果是你在开发STL,那么对于vector这么重要的组件,写上百个测试都不为过,时间+空间等等都应该涵盖。(当然我不是说我们应该这么做)
最后
不会强制要求大家做这样一件事,只是因为TA觉得它是有益的,所以提倡大家这么做。
不同的情形下对测试的要求不同。有一点很显然的是写测试非常花时间。
作为课程作业来讲,一般情况是不会有人重用你的代码的(除了你),也不是一个要维护好几年的工程。所以测试的意义没那么大。
但是我觉得写测试是程序员的基本素养。 设想你建了一座桥,而没有做压力测试就交工了是对的事情么?
比方现在的我们是在学建桥, 如果我们这个时候不养成这个习惯,到了那个上阵自然就会了么?
First Issue
讨论问题~~
assignment1&3
_(:з」∠)_ 为什么不需要用到fetch
RT.. 否则要怎么将被fork的项目的最新更新同步到fork的项目呢? 0.0
Github教育福利
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
eric's pull requests
Add HelloWorld.cpp
pull request 被close掉同学注意。Git Branch 的使用[重要]
在Review的过程中,发现不用branch是不行的。
如果TA事先想到了,不会有这次问题。
不过希望同学们把这次麻烦, 当作一次实践git的机会吧。
遇到的问题
- assignment0 的还没有被Merge, 你在master 做修改,比如做了assignment1 ,这个时候,做的修改会被体现到之前pull request. Review 起来非常麻烦。
- 同学们把TA的代码和你的代码混在一起,难以Review
- 提交了非你的目录下的代码
Solution
正确的姿势发 pull request
现在建议同学们:
在做一个新的assignmentX 的时候
- 创建分支
git branch assignmentX
- 切换分支
git checkout assignmentX
- 在新分支下做assignmentX的相关内容。
- 把分支push 到你的远程仓库
git push origin assignmentX
- 用这个分支create pull request.
Git 想关概念和用法,请自行脑补。
重建仓库
把TA的代码一起提交的同学
提交了错误的文件(比如gitignore) 或
现在已经几个Assignment,并且混在一起的同学注意
- TA会close你的pull request
- 备份你的本地数据
- 删除 你的远程仓库,(again 备份好你本地的)。
- 重新从课程仓库fork。
- 按照上面的步骤为每个assignemnt建单独的branch。发单独的pull request。
- cheers~
关于提交代码:
分两次提交pull request
- 请提交TA提供的文件。 请在pull request 注明 [Initial Commit],TA会尽快merge你的代码。
- 然后再提交你的solution。
这样子review的时候才能看出哪些是你做的修改。
格式
另: Pull request
标题格式 学号_姓名_assignment
example 11300240057_CHENWEIDONG_assignment0
文件目录按照src/ testcase/划分
src/为你们源代码的根目录。
请同学们该完代码之后修改一下文件头部的署名啊。亲.
尊重自己的劳动成果
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.