免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

让我欢喜让我忧——我的C++之路 [复制链接]

论坛徽章:
0
551 [报告]
发表于 2012-04-17 15:50 |只看该作者
陈良乔 发表于 2012-04-17 15:04
后继章节

A.C.E  实现文件排序模块


你程序验证过了吗?
能不能把完整程序,测试用例全部贴出来看看?

论坛徽章:
0
552 [报告]
发表于 2012-04-17 16:16 |只看该作者
walleeee 发表于 2012-04-16 17:06
回复 478# 幻の上帝


知音

写书,跟做纯粹的技术还是有很大差别的

当然,我也应该保证其正确性,在正确的基础上,可以获多或少的裁减

论坛徽章:
0
553 [报告]
发表于 2012-04-17 16:20 |只看该作者
回复 554# 陈良乔


你觉得差别很大么?我怎么觉得差别小呢?

作为作者,实事求是,深耕慎种是基本态度了。但是国内目前很多书,生搬硬套,左抄右摘,我看得太多了。基本已经失望。

chinapub上面现在基本已经很少出现好书了。现在基本是每个月有可能会出现1本还不错的书。当然,我是只计算机方面的书籍,其他的可能也会有一些。

论坛徽章:
0
554 [报告]
发表于 2012-04-17 16:22 |只看该作者
walleeee 发表于 2012-04-16 17:13
回复 495# 陈良乔


谢谢你的关注和意见

关于书籍的交互,我放到了chenlq.net上进行,有兴趣可以看看

关于代码,我更倾向于让读者自己敲,这往往会让他们得到意想不到的锻炼

我之前和一些志愿者翻译了C++11 FAQ,也放在chelq.net,现在正在整理

C++11的内容,间接地来自这里,但并不是直接的翻译,这里有版权的问题




论坛徽章:
0
555 [报告]
发表于 2012-04-17 16:28 |只看该作者
gvim 发表于 2012-04-16 18:04
C版里面0&NULL的争论火过好多次啦 让他自己看看吧。从while strlen, memory.h, 0&NULL,等综合 ...


这个我得承认,我在C方面的经验,确实相较各位有很大的差距

论坛徽章:
0
556 [报告]
发表于 2012-04-17 16:38 |只看该作者
AD8018 发表于 2012-04-17 10:23
AD来做的话,会写下这样的函数


对的,你的代码更加严谨

论坛徽章:
0
557 [报告]
发表于 2012-04-17 16:48 |只看该作者
OwnWaterloo 发表于 2012-04-17 15:13
回复 549# AD8018

也有确实有实现为一对函数的C库:R* f(T* x); R const* f_c(T const* x)。 具体是哪个 ...


很多疑问?我来尝试着回答一下

1. 到底是C的书,还是C++的书?
为什么看到这么多的例子里大量出现的是strcmp, FILE*, 手工实现list;而不是直接用std :: string, std :: iostream, std :: list?

// 这个帖子是关于《我的第一本C++书》这本C++书的
// 但,大家现在看到的是另外一本关于C的,跟C++没有关系,

我能想到的理由: C-style-string, 手工实现list只是作为范例。
介绍编程需要提出一些问题, 然后讲解如何编程去解决它们, 只是本书恰好使用字符串与链表作为需要解决的问题。
并不排除其他章节会讲解 std :: string 与 std :: list。

而 FILE* , 是因为 iostream 确实存在许多问题。 但后续也有章节会介绍 —— 至少,为了能看懂那些使用 iostream 的代码也应该介绍。

只是目前公布出的样章里恰好都不是"后续章节"?
// 混淆了,不好意思,这是两本书

2. 作者自己有 const-correctness 的意识么?

word* findnode(word* head, char* key);
如果说后续会出现它的一个重载:
word const* findnode(word const* head, char* key);

那对head就说得通。 但key绝对说不通。 怎么都应该是:
word* findnode(word* head, char const* key);
word const* findnode(word const* head, char const* key);

能想起的两个反例: CreateProcessA还是W, 还有一个模拟键盘的库(按键精灵用的那个,忘记名字了)。
vector<char> v(s.begin(), s.end());
v.push(0);
f(&v[0]);
而不能f(s.c_str());
真的是很难受……
// 恩,这里确实是我的错误,谢谢大家的提醒


3. 作者打算如何说清 pointer 与 const 之间的故事?

const本身还不算特别难,而 pointer…… 就是C/C++ 的特色,也是困难的地方。
这两者搅和在一起之后,更是让许多程序员都弄不明白了。


我能想到的,将这两者一个接一个地说清楚的办法就是避免用char const* 做key。
将例子换成:
T* findnode(T* head, int /* 比如用int,总之避免用指针 */ key);

等有了重载、const、const 与 pointer以及const-correctness的准备之后再介绍:
T const* findnode(T const* head, int  key);

就抓不出毛病了。 之后的其他例子就可以用 char const* 作为key了。

// 关于const,也许稍后我可以将相关的章节贴出来,大家帮我看看我讲清楚了没有

论坛徽章:
0
558 [报告]
发表于 2012-04-17 17:15 |只看该作者

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. static int
  5. cmp(const void *p1, const void *p2)
  6. {
  7.     int a = *(int*)p1;
  8.         int b = *(int*)p2;
  9.         if(a>b)
  10.                 return 1;
  11.         else
  12.                 return -1;

  13. }
  14. int
  15. main(int argc, char *argv[])
  16. {
  17.     int arr[5] = {2,3,2,5,6};
  18.     qsort(arr, 5, sizeof(int), cmp);
  19.     for (int j = 0; j < 5; j++)
  20.         printf("%d\n",arr[j]);
  21.     return 0;
  22. }
复制代码

论坛徽章:
0
559 [报告]
发表于 2012-04-17 17:34 |只看该作者
hellioncu 发表于 2012-04-17 15:37
qsort的比较函数要返回0三种值,像你这样只返回0和1是有问题的。

我劝你暂时还是别写书了


我想请教一下,在什么时候,什么情况下会出现问题?

论坛徽章:
0
560 [报告]
发表于 2012-04-17 18:03 |只看该作者
本帖最后由 0xC1988 于 2012-04-17 18:04 编辑
陈良乔 发表于 2012-04-17 17:34
我想请教一下,在什么时候,什么情况下会出现问题?

The  qsort() function sorts an array with nmemb elements
       of size size.  The base argument points to the start  of
       the array.

       The  contents of the array are sorted in ascending order
       according to a comparison function pointed to by compar,
       which  is  called  with  two arguments that point to the
       objects being compared.

       The comparison function  must  return  an  integer  less
       than,  equal to, or greater than zero if the first argu?
       ment is considered to be respectively less  than,  equal
       to,  or greater than the second.  If two members compare
       as equal, their order in the sorted array is undefined.


你的代码,a>b return 0,a=b return 1,a<b return 1,我还是想问,你代码验证过吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP