摘要: “我跟你们说,你们知道STL容器,vector/string/deque等等,都有个reserve方法吗?你们一个个地push_back,嫌C++比C慢,怪谁?” “要像我这样,预先分配足够大的空间,这样push_back的时候才快,明不明白?” “别老说写C比写C++好,因为C代码怎么运行的都在自 阅读全文
posted @ 2017-04-05 01:33 Harley_Quinn 阅读(2587) 评论(0) 推荐(0) 编辑
摘要: 首先说下STL优先队列的局限性,那就是只提供入队、出队、取得队首元素的值的功能,而dijkstra算法的堆优化需要能够随机访问队列中某个节点(来更新源点节点的最短距离)。 看似可以用vector配合make_heap/push_heap/pop_heap来实现这个功能,实际上手动实现就会发现问题所在 阅读全文
posted @ 2017-04-02 05:59 Harley_Quinn 阅读(1590) 评论(2) 推荐(0) 编辑
摘要: 刚才写DFS程序,为了加个创建DFS树然后再次遍历的功能,把初始化的代码给封装到init()函数里,然后直接调用之后对同样是邻接表表示的DFS树进行DFS。 然后令人诧异的是竟然没有打印结果,调试发现我定义的deque<bool> visited;并没有被重置为false。 我在init()函数中的 阅读全文
posted @ 2017-04-01 04:36 Harley_Quinn 阅读(933) 评论(0) 推荐(0) 编辑
摘要: 数组和指针在作为实参传入T[] 或T*的形参时没有区别 上述代码输出的是4(32位系统)或8(64位系统),总之不是sizeof(int) * 5(数组大小)。 为什么明明形参是数组形式的int [],实际上和指针形式的int *无异呢?关键原因就在于,数组是不能作为左值的。 函数传参并不是相当于赋 阅读全文
posted @ 2017-03-21 18:28 Harley_Quinn 阅读(1178) 评论(0) 推荐(0) 编辑
摘要: 差不多快实现完了ls -l,但是在测试阶段发现一个问题,对于包含[a-ZA-Z]之外的字符,系统的排序方式并不一样。 很想了会儿,总算发现原来它的排序方式是无视[a-ZA-Z]之外的字符的 至于怎么发现的,只是个偶然。之前测试的文件夹下a.out被排在了address.c之后,百思不得其解。后来偶然 阅读全文
posted @ 2017-03-21 02:19 Harley_Quinn 阅读(7122) 评论(0) 推荐(1) 编辑
摘要: 自己手写实现ls -l命令纠结了很久的地方,刚才总算搞明白了。直接上代码重要部分 4096是块的默认大小,由于total的单位是k(1024),所以后面还要再乘以4。 total其实就是所有文件所占的块的大小总和,由于文件大小并不一定都是标准的4096的倍数,比如某文件大小为10000,就需要占用1 阅读全文
posted @ 2017-03-20 20:31 Harley_Quinn 阅读(3657) 评论(0) 推荐(1) 编辑
摘要: 直接贴代码和结果 实际ID: root(0), xyz(1000), abc(1001) 可以发现,用户xyz给程序a.out的权限加上s后,ls -l的权限字符串第4位的x变成了s,之后其他用户在执行a.out时,当前进程的有效用户ID都会变成a.out所属用户(即xyz)的ID。 每个进程都有一 阅读全文
posted @ 2017-03-20 05:41 Harley_Quinn 阅读(1942) 评论(0) 推荐(0) 编辑
摘要: 其实看APUE时就想试着写些简单的stdio函数了,但是一直没实践,看到这里时发现书上写得不完整,便敲代码试了下。 第1个readline速度非常慢原因在于每次读取字符都执行了系统调用read(),而系统调用意味着内核态和用户态之间的切换,系统调用数量太多会导致切换过程非常费时。因此为了快速的进行I 阅读全文
posted @ 2017-03-16 23:53 Harley_Quinn 阅读(634) 评论(0) 推荐(0) 编辑
摘要: 网上有些教程最后一步是sudo apt-get install libglut-dev,但是会报错Unable to locate package libglut-dev,谷歌错误信息后搜到stackoverflow上有人问这个问题,http://askubuntu.com/questions/96 阅读全文
posted @ 2017-03-02 23:31 Harley_Quinn 阅读(12433) 评论(1) 推荐(0) 编辑
摘要: 测试ftell函数时发现报错,先贴源码 错误信息如下 于是用GDB调试,在fputs处设断点,输出字符数组 突然我想查看每个字符的值,于是看到的是这个 啊,突然想起来,buf的类型并不是char*,虽然如果作为函数输入参数的话会被当成char*,但是buf的实际类型是char (*)[4] 所以输出 阅读全文
posted @ 2017-03-02 21:02 Harley_Quinn 阅读(3230) 评论(0) 推荐(0) 编辑