您的位置:首页 > 编程语言 > C语言/C++

《C++大学自学教程》第七版读后感

2008-05-09 23:22 141 查看
读完这本教材(《C++大学自学教程》第七版 作者:AI Steves 翻译:林瑶 蒋晓红 彭卫宁 等),我有一些看法和感受。希望我的这些经验对于正在选择C++教程的战友们有所帮助。:p

对于此书的在内容上的划分,我个人认为作为初学者,这样的内容分布还是不错的选择。(不过偶尔要看了后面的再回头看前面的一些内容)但是,对于该书的某些内容的表述,(或许只是中文版存有这样的错误,偶没有看英文版,也就不到底是哪个环节的问题了。)偶实在是不敢恭维,不知道是原作者的问题还是翻译者的问题,难不成是偶脑子的问题?:0

该书中有些源程序代码出点小差错,我觉得是可以容忍的;某些段落来来回回琢磨研究也难以明白它到底要说明什么的,我觉得也不能算是什么大事。

但是!在我读书的过程中,居然发现了作为书本的一些致命的错误。(只有有例子的STL说明我才认真看了)

1. 在第508页的partial_sum(first, last, result)的说明上,这个算法的说明根本就是错误的。在该书的说明如下:

迭代器first和last指明范围内的元素进行部分求和(partial sum),然后把计算结果赋予从result开始的序列。部分求和的计算步骤为:首先把序列的第1个元素赋值给新序列的第1个元素,然后把原序列的前两个元素相加,并把结果赋值给新序列的第2个元素,再把原序列的第2和第3个元素相加,并把结果赋值给新序列的第3个元素。以此类推,直到计算完原序列的全部元素为止。此函数的另一个版本以谓词作为第4个实参。而该函数在《c++ primer》中的说明如下: partial_sum()的第一个版本创建一个新的元素序列其中每个新元素的值代表了[first,last)序列中这位置之前(包括该位置)所有元素的和。例如,已知序列...{0,1,1,2,3, 5,8} ,则新序列是...{0,1,2,4,7,12,20} 。例如,第四个元素是前三个值...{0,1,1}的部分和加上它自己(2) 产生值4。
第二个版本使用程序员传递的二元操作例如已知序列...{1,2,3,4} 我们传递函数对象times<int> 结果序列是...{1,2,6,24} 在两个版本中OutputIterator 指向新序列末元素的下一个位置。 上述中的第一个版本就是《c++ 大学教程》里说的没有以谓词作为第4个实参的版本二。

2. 这个不能算错误吧,只是一些组织得没有营养的字句而已。在第500页的partial_sort(first, middle, last),它的说明居然让我看了页不知道他说的是什么。(是偶的问题么?)在《c++ 大学教程》里,它的说明如下:对迭代器first和last指明范围内的元素排序,吧排序后的前一部分元素放至序列的前一部分(first和middle指明的范围),其余元素放在后一部分(middle和last指明的范围)。此函数的另一个版本以谓词作为第四个实参。
而在《c++ primer》中的说明是:partial_sort()对整个序列作部分排序被排序元素的个数正好可以被放到[first,middle)范围内在[middle,last)中的元素是未经排序的它们都落在实际被排序的序列之外,例如:已知数组int ia[] = {29,23,20,22,17,15,26,51,19,12,35,40 };调用partial_sort() 使第六个元素为middle stable_sort( &ia[0], &ia[5], &ia[12] );则产生了一个序列其中五个最小的元素被排序即middle-first 个元素{12,15,17,19,20,29,23,22,26,51,35,40} 从middle 到last-1 的元素并没有按任何特定的顺序但是它们的值都落在实际被排序的序列之外第一个版本用底层类型的小于操作符第二个版本根据comp 对元素进行排序。

对于没有读过此书的伙伴,如果您能对书中的一些模糊表达具有一定的容错能力的话,这本书还是不错的选择。还有就是,读此书过程中最好能在旁边摆上一本权威的《C++ Primer》用来差错。:P
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: