C++ Primer中文版读书笔记


(注意,Lm 表示第 m 行,L-n 表示倒数第 n 行)

■导读 p23
原文:
template
T func( T p1, T p2, int p3 ) // ( T p1, T p2, int p3 ) 称为 template parameter list
{     ...     }              // p1, p2 称为型别参数(type parameter)
                             // p3 称为非型别参数(nontype parameter)
更正:
template         // 称为 template parameter list
T func( T p1, T p2, int p3 ) //   其中 T 是 template type parameter(型别参数)
{     ...     }              //   另有所谓 template nontype parameter(非型别参数),
                             //   本例未出现。

■p36 L-2
原文:当它後面紧跟着一个 class 名称
更正:当它紧跟着一个 class 名称後面

■p106 L17(原书笔误)
原文:int *&ptrVal2 = pi;
更正:int *&refPtr = pi;

■p342: L-4(原书笔误)
原文:以下示范利用 rswap() 交换两个指标
更正:以下示范利用 ptrswap() 交换两个指标

■p496: L13
原文:inline 或 extern 修饰词应该放在 template 参数列之前,而非┅
更正:inline 或 extern 修饰词应该放在 template 参数列之後,而非┅

■p1130: copy_backward() 下的第二段文字(原书错误)
原文:
例如,数列 {0,1,2,3,4,5},我们可以复制最后三个元素 (3,4,5) 到
最前三个元素 (0,1,2) 身上,作法是将 first 设定为元素 0 的位址,
last1 设定为元素 3 的位址,last2 设定为元素 5 的下一个位址。
于是元素 5 会被指定到原来的元素 2 身上,元素 4 会被指定到原来的元素 1 身上,
元素 3 会被指定到原来的元素 0 身上。最后的结果是 {3,4,5,3,4,5}。

更正:
例如,数列 {0,1,2,3,4,5},我们可以复制最前三个元素 (0,1,2) 到
最后三个元素 (3,4,5) 身上,作法是将 first 设定为元素 0 的位址,
last1 设定为元素 3 的位址,last2 设定为元素 5 的下一个位址。
于是元素 2 会被指定到原来的元素 5 身上,元素 1 会被指定到原来的元素 4 身上,
元素 0 会被指定到原来的元素 3 身上。最后的结果是 {0,1,2,0,1,2}。

================================================================

三刷更正内容:
(注意,Lm 表示第 m 行,L-n 表示倒数第 n 行)

■p252 图片过于粗糙,重制。

■p318 最后一段第二行(误译)
原文:这种作法之所以能够成功,是因为这些 containers 保证其
      元素实体会以连续的方式出现(存在)。
更正:这种作法之所以能够成功,是因为这些 containers 保证其
      键值相同的元素会连续出现(存在)。

■p322 最后一段第二行(修润)
原文:我们称 stack 为一种所谓的 container adapter,因为它
      在底层的 container 集合体身上课徵 stack 抽象性质。
更正:我们称 stack 为一种所谓的 container adapter,因为它
      系利用底层各类型 container 加工完成 stack 抽象性质。

■p495, L4(原书笔误)
原文:// ok: Type used many times in template parameter list
更正:// ok: Type used many times in function parameter list


■p501, L12(中译本误植)
原文:min2() 的第一个函式参数是个型别为 *Type 的指标。
更正:min2() 的第一个函式参数是个型别为 Type* 的指标。

■p503, L-5(原书笔误)
原文:上述的 template 引数 T 从第一个函式引数中推导得 int,
      又自第二个函式引数中推导得 unsigned int,因此 template 引数推导失败。
更正:上述的 template 引数 T 从第一个函式引数中推导得 unsigned int,
      又自第二个函式引数中推导得 int,因此 template 引数推导失败。
感谢:leetron

■p565, L7(原书笔误)
原文:Exception declaration 是函式介面的一部份,所以它必须...
更正:Exception specification 是函式介面的一部份,所以它必须...

■p576, 最上(中译稿漏印,缺少两个右大括号)
原文:     // ...
更正:     }
           // ...
       }

■p595, L-5
原文:当然,「令一个 non-const iterator 指向一个 const iterator」总是可以的。
更正:当然,「将一个 non-const iterator 指派给一个 const iterator」总是可以的。

■p596(原书笔误)
说明:本页下方有三点,讨论 back_inserter, front_inserter, inserter.
      并均利用 unique_copy() 做为使用范例。每一个 unique_copy() 都
      遗漏了最后的右大括弧。
更正:请为 unique_copy() 加上最后的右大括弧。

■p652, L-1(中译稿漏印,少了最后一行)
原文:有着以下的型别:
更正:有着以下的型别: int (Screen::*)()

■p731, 第一段(中译误失)
原文:
举个例子,如果我再次修改 Account class 的定义,令 _name 的型别为 string,
那麽预设的 memberwise 指派动作:
newAcct = oldAcct;
就会被编译器唤起,犹如编译器为我们产生了以下的 copy assignment 运算子:

更正:
举个例子,如果我再次修改 Account class 的定义,令 _name 的型别为 string,
那麽当:
newAcct = oldAcct;
预设的 memberwise 指派动作就会被编译器唤起,犹如编译器为我们产生了
以下的 copy assignment 运算子:

■p915, 第二段文字,第一行(译笔不佳,重译)
原文:一个 derived class constructor 只能合法地唤起其
      「直接 base class」的 constructor
更正:一个 derived class constructor 能够合法直接唤起的 construtor 只有其
      「直接 base class」的 constructor

■p915, 17.4.4 的标题(修润)
原文:17.4.4 惰式错误侦测(Lazy Error Detection)
更正:17.4.4 缓式错误侦测(Lazy Error Detection)
注意:请同时修改
      p.ix, 目录
      p.916, L6
      p.981, 18.3.2 标题前两行
      p.984, L-6
      p.1224, 索引

■p941, 17.5.8 标题(误译)
原文:虚拟函式、虚拟解构式 constructor、虚拟解构式 destructor
更正:在建构式(constructors)与解构式(destructors)中呼叫虚拟函式
注意:请同时修改目录 (p.x)

■p1006, L-13(译笔不佳,重译)
原文:一旦成为 base class,class template 必须完整列出其参数列。
修改:欲令一个 class template 扮演 base class 的角色,我们必须完整列出其参数列。

■p1045  19.2.7 标题(笔误)
原文:19.2.7 Constructors(解构式)和 Function try Blocks 的关系
更正:19.2.7 Constructors(建构式)和 Function try Blocks 的关系

■p1126, adjacent_difference 内文第二行(误译)
原文:给予数列 {0,1,1,2,3,5,8},新数列的 first 元素是
      原数列的 first 元素的拷贝:0。
更正:给予数列 {0,1,1,2,3,5,8},新数列的第一个元素是
      原数列的第一个元素的拷贝:0。

■p1126, L-15, p1127, L9(原书错误)
说明:这两行出现的 times,是某 function object 的旧名称,
      在 C++ standard 中已改名为 multiplies. 见 p590
更正:将这两行出现的 times 改为 multiplies

■p1127, adjacent_find() 第二版本规格,最后一行(原书错误)
原文:ForwardIterator last, Predicate pred);
更正:ForwardIterator last, BinaryPredicate pred);

■p1128, binary_search() 第二版本规格,缺一行(原书遗漏)
原文:bool
      binary_search(ForwardIterator first,
                    ForwardIterator last, const Type &value,
                    Compare comp);
更正:请在 bool 前面加上一行
      template

■p1149, inner_product() 规格说明最后一行(原书错误)
原文:  (2+1) - (3+2) - (5+3) - (8+4)
更正:- (2+1) - (3+2) - (5+3) - (8+4)

■p1166, L9, L20(原书错误)
■p1167, L1, L3 (原书错误)
说明:这四行出现的 times,是某 function object 的旧名称,
      在 C++ standard 中已改名为 multiplies. 见 p590
更正:将这四行出现的 times 改为 multiplies

■p1177, rotate() 规格说明第一行(原书错误)
原文:rotate() 会将 [first,middle) 范围内的元素搬移到 container 尾端。
更正:rotate() 会将 [first,middle) 范围内的元素搬移到 last 所指位置。

■p24: L-13
原文:阵列的名称是 fibon。这是一个整数阵列,维数为 9。
更正:阵列的名称是 fibon。这是一个整数阵列,尺度(元素个数)为 9。

■p24: L-6
原文:最后一个元素,我们应该把维数减 1 做为索引值
更正:最后一个元素,我们应该把尺度(元素个数)减 1 做为索引值

■p28: L-9
原文:new 算式的第二个版本配置出一个特定型别和特定维数的阵列。
更正:new 算式的第二个版本配置出一个特定型别和特定尺度(元素个数)的阵列。

■p34: L7
原文:我把阵列的维数指定给 array_size。
更正:我把阵列的大小指定给 array_size。

■p114: 最后一段文字
原文:
阵列的定义系由型别符号、识别名称、维度(dimension)三者构成。
维度以一个中括号表示,指出阵列之中有多少元素。阵列的维度大小必须
大于或等于 1。维度值必须是一个常数算式,也就是说,它必须能够在
编译时期便被编译器核定(evaluate)其值。换言之一个 non-const
变数不能够用来指定阵列的维度大小。

更正:
阵列的定义系由型别符号、识别名称、尺度(dimension)三者构成。
尺度以一个中括号表示,指出阵列之中有多少元素。阵列的尺度必须
大于或等于 1。尺度必须是一个常数算式,也就是说,它必须能够在
编译时期便被编译器核定(evaluate)其值。换言之一个 non-const
变数不能够用来指定阵列的尺度大小。

■p115: L2
原文:只能够在执行时期完成,所以它不能够用来指定阵列维度。
更正:只能够在执行时期完成,所以它不能够用来指定阵列尺度。

■p115: L-13
原文:面对一个明白初始化的阵列,你不需要再指定其维度,
更正:面对一个明白初始化的阵列,你不需要再指定其尺度,

■p115: L-9
原文:如果维度被明白指出,那麽串列中的元素个数就不能够超越该值,
更正:如果尺度被明白指出,那麽串列中的元素个数就不能够超越该值,

■p116: L1
原文:ca1 的维度值是 3 而 ca2 的维度值是 4。
更正:ca1 的尺度(元素个数)是 3 而 ca2 的尺度是 4。

■p162: L8
原文:像是阵列的维数,或是 template 的 nontype 参数。
更正:像是阵列的尺度(元素个数),或是 template 的 nontype 参数。

■p415: L13
原文:以 new 算式配置获得的阵列,其维度可被指定为┅
更正:以 new 算式配置获得的阵列,其尺度(元素个数)可被指定为┅

■p616: L6
原文:也应该允许使用者在执行时期设定萤幕的实际维度。
更正:也应该允许使用者在执行时期设定萤幕的实际尺寸。

■p617: L-14
原文:使用者决定让所有的 Screen class objects 维度为 80 x 24,
更正:使用者决定让所有的 Screen class objects 尺寸为 80 x 24,

■p1079: L17
原文:其中的 bufSize 便是字元阵列 buf 的维度。
更正:其中的 bufSize 便是字元阵列 buf 的尺度(元素个数)。

■p1079: L22
原文:如果 buf 的宣告并未指定维度:
更正:如果 buf 的宣告并未指定尺度(元素个数):

■导读 p23, L-6
原文:以下造成上述 function template 产生出
      函式实体 func(float, float, int);
更正:以下造成上述 function template 产生出
      函式实体 double func(double, double, int);

■前言p.xviii, L9(误译)
原文:最后我要说,当一个人写了一本书,他决定略去的东西,
      往往和他决定涵盖的东西一样重要。
更正:最后我要说,当一个人写了一本书,他决定略去什麽东西,
      往往和他决定涵盖什麽东西一样重要。

■p35 L13(原书笔误)
原文:#include ;
更正:#include
感谢:alberta

■p39 L2(原书笔误)
原文:{init(rhs.size, rhs.ia);}
更正:{init(rhs._size,rhs.ia);}
感谢:chlin, Aua

■p39 L-3(原书笔误)
原文:assert( index >= 0 && index < size );
更正:assert( index >= 0 && index < _size );

■p108, L10
原文:
如果由右往左阅读上述定义,我们会发现,pi_ref 是个 reference,
代表一个指标,此指标指向一个型别为 int 的 const object。
但是我们的 reference 实际上却未被用来代表一个常数,而是被用来
代表一个非常数指标(该指标指向一个常数 object)。

更正:
如果由右往左阅读上述定义,我们会发现,pi_ref 是个 reference,
代表一个指标,此指标指向一个型别为 int 的 const object。
我们的 reference 代表的不是一个常数指标,而是一个非常数指标,
指向一个常数 object。

■p125 练习 3.25(原书笔误)
原文:bool is_equal( const int*ia)
更正:bool is_equal( const int* ia)    请在 ia 之前加一空格
感谢:黄向阳先生

■p125 页眉位置
说明:页眉位置跑掉了

■p155 L6(原书错误)
原文:while( ix_vec < 10 )
更正:while( ix_vec < 9 )

■p183 L3(错别字)
原文:就某种意义而言,这说明了 C++ 语言一个自相矛顿的基础议题。
更正:就某种意义而言,这说明了 C++ 语言一个自相矛盾的基础议题。

■p183 L7(错别字)
原文:Standard C++ 引入这些转型运算子以强调(鲜明标示出)这个矛顿
更正:Standard C++ 引入这些转型运算子以强调(鲜明标示出)这个矛盾

■p209 练习5.7 (d) 第一行(原书笔误)
原文:int ival=512 jval=1024, kval=4096;
更正:int ival=512, jval=1024, kval=4096; (原行少一个逗号)

■p230 L11(原书笔误)
原文:class ilist_item {
更正:class ilist {

■p242 L-4(笔误)
原文:...,後面紧跟着一串以中括号为界的参数。
更正:...,後面紧跟着一串以角括号为界的参数。

■p468, 第二大段程式码的第五行(注解)出现一个中文乱码
原文:potentially dangerous depending on i掇 value
更正:potentially dangerous depending on i's value

■p504, L-1
原文:根据各对应之「函式引数」所推导出来的「template 引数」,结果一定相同。
更正:根据各对应之「函式引数」所推导出来的「template 引数」,结果必须相同。

■p592, L16(原书笔误)
原文:Ires = IntNot( Ival1, Ival2 );
更正:Ires = IntNot( Ival1 );
说明:logical_not 是一个 unary function object

■p599, L4(中译本笔误)
原文:其中必须定义有一个 input 运算子(operator<<)
更正:其中必须定义有一个 input 运算子(operator>>)

■p600, L5(原书笔误)
原文:其中必须定义有一个 output 运算子(operator>>)
更正:其中必须定义有一个 output 运算子(operator<<)

■p694, L6(原书笔误)
原文:Account *pacct;
更正:Account *pact;

■p694, L9(原书笔误)
原文:pact->Acct.Account::Account(
更正:pact->Account::Account(

■p709, 练习14.8, L4(原书笔误)
原文:Accout acct;
更正:Account acct;

■p1183, L6(译笔重修)
原文:传回值 OutputIerator 指向被放进 result 所指之 container 内的
      最后元素的下一位置。
更正:传回值 OutputIerator 指向「result 所指之 container」内的
      最后元素的下一位置。

■p1188, 小标题 swap_range()(原书错误)
原文:swap_range()
更正:swap_ranges()
注意:该小段的函式原型、文字第一行、文字第四行各有一个 swap_range(),
      皆应改为 swap_ranges()。同时请修改 p.xii 之目录及 p.1235 之索引。

■p729, L12 (误译)
原文:会将 newAcct 的每一个 nonstatic member 一一指派给 oldAcct 的对应 member。
更正:会将 oldAcct 的每一个 nonstatic member 一一指派给 newAcct 的对应 member。

■p826, L9  (原书笔误)
原文:template Buf { ... };
更正:template class Buf { ... };

■p903, L9  (笔误)
原文:...必须统统出现于相同的 socpe 内。
更正:...必须统统出现于相同的 scope 内。

■p239 L-1(原书笔误)
原文:init_iter( ilist_item *it = 0 );
更正:ilist_item* init_iter( ilist_item *it = 0 );

■p1228, 索引右栏 L-10(笔误)
原文:increment(++) 递减
更正:increment(++) 递增

■p1119, 表20-1 第一行 (笔误)
原文:Boolalpha
更正:boolalpha

■p91 L-1(原书笔误)
原文:因此 ip+2 是否导致一个合法...
更正:因此 pi+2 是否导致一个合法...

■p780 15.9.2 节,L1(重译)
原文:Class constructor 之中凡使用单一参数者,例如...
更正:Class constructor 之中凡能接受单一引数者,例如...

■p731 L-11(误植1+错字1)
原文:一般而言,copy constructor 运算子和 copy assignment 运算子
      应该被视为栾生兄弟。
更正:一般而言,copy constructor 和 copy assignment 运算子
      应该被视为孪生兄弟。

■p991 程式码最后,class MI (原书遗漏)
原文:class MI : public Derived, public Base2 {
      public:
      // ...
更正:class MI : public Derived, public Base2 {
      public:
      void foo(double);     // 注意,新增此行
      // ...

■4.13 标题
原文:4.13 优先权(Precedence)
更正:4.13 优先序(Precedence)
注:1. precedence 译为优先序,比较不会和 priority(优先权)混淆。
    2. 请检修整个 4.13 节,并修改目录 4.13 及索引 p1228。

■导读 p22, L9 (笔误)
原文:小括弧内称为函式本体(function body)
更正:大括弧内称为函式本体(function body)

■导读 p23, L21(误植)
原文:// 使用者自定的转换为行系由┅
更正:// 使用者自定的转换行为系由┅

■导读 p29, L-2 (笔误)
原文:┅而不是针对所有的 tempalte 参数做特殊化┅
更正:┅而不是针对所有的 template 参数做特殊化┅

■p46, L-10(误译)
原文:并被含入于 IntArray.h 表头档中
更正:并含入 IntArray.h 表头档
■p77, L-13(原书错误)
原文:/14(new line)
更正:/12(new line)

■p78, L-2(原书题目设计错误)
原文:(b) 10, 10u, 10L, 10uL, 012, 0xC
更正:(b) 10, 10u,
 10L, 10uL, 012, 0xA

■p355, 练习 7.6 (b)(原书笔误)
原文:operator( matrix );
修改:operate( matrix );

■p538, L1(制版遗漏)
原文:    max( &ad[0], size );
修改:    max( &ad[0], size );
      }   // 书上少印了这个右大括弧


■p803, L7(误译)
原文:宣告于某 namespace 内的「运算子 集」-- 该 namespace 定义有
      该型别之运算子
修改:宣告于某 namespace 内的「运算子 集」-- 该 namespace 定义有
      被使用之运算元型别

■p1072, 练习 20.1 题目最后一行码(原书笔误)
原文:complex purei( 0, 7 )
修改:complex purei( 0, 7 )
■p1143, find_end 文字说明第二行起(补强)
原文:例如,给予字元序列 Mississippi 和第二序列 ss,
      find_end() 会传
回一个 ForwardIterator 指向
      第二个 ss 的第一个 s 的位置。
修改:例如,给予字元序列 Mississippi 和第二序列 ss,
      find_end() 会传回一个 ForwardIterator 指向
      Mississippi 中的第二个 ss 的第一个 s 的位置。

■p239, L3(原书错误)
原文: : _at_front(0), _at_end(0)
修改: : _at_front(0), _at_end(0), _size(0)
说明:如果没有这麽做,copy 之後,新的 list 的元素个数会出错

■p269, L6 (中译本笔误)
原文:一个以的元素呢?
修改:一个以上的元素呢?


■p288, L-3 (中译本笔误)
原文:size_type endPos = name.find_last_off( 'a' );
更正:size_type endPos = name.find_last_of( 'a' );

■p659, L20 (中译本笔误)
原文:最大的资料型别是 dval,
更正:最大的资料型别是 _dval,


■p119, L-12(误译)
原文:上述对 ia 所作的提领 (deferencing) 动作,会传回阵列中
      第一个元素的位址;然後再加上 1。
更正:上述对 ia 所作的提领 (deferencing) 动作,会传回阵列中
      第一个元素的值;然後再加上 1。

■p710, L-6(原书笔误)
原文:pooh_pals[1]._name != pooh_pals[2]._name();
更正:pooh_pals[1]._name != pooh_pals[2]._name;

■p1125, L14 (原书错误)
说明:这里出现的 times,是某 function object 的旧名称,
      在 C++ standard 中已改名为 multiplies. 见 p590
更正:将 times 改为 multiplies


■pix & p825, 16.2.1 标题(误译)
原文:为非型别参数(Nontype Parameters)指定 Template 引数
更正:为 Template 的非型别参数(Nontype Parameters)指定引数

■p522, 上半部程式码之下的第一段文字的第二行最后(原书错误)
原文:Type 的 template 引数因而是 int 而非 int*。
更正:template 引数 Type 因而是 int* 而非 int。
感谢:jjhou
日期:2001/03/29

■p522, 上半部程式码之下的第二段文字的第二行最后(中译本错误)
原文:例如稍早的 T* 和 T,template A(特制体)必须有个参数能够接受
      「template B 之对应参数」所能接受的引数的超集。
更正:例如稍早的 T* 和 T,template B 必须有个参数,能够接受
      「template A(特制体)之对应参数」所能接受的引数的超集。

■p692, L-3(误译)
原文:即使有这样的需求,C++ class 规格也不允许这麽做。要知道,我们的...
更正:啊呀,class Account 的规格并不允许这麽做(译注:意指不允许「只指定
      帐户馀额却不指定帐户名称」)。因此,我们的...

原文:const int *&pi_ref = &ival;
更正:const int *const &pi_ref = &ival;
日期:2001/07/23
侯捷注:经网友提醒,以上错误发生于 L15,而非 L9。因此,
        请将 L9 改回原状:const int *&pi_ref = &ival;
        并将 L15 由书上的 int *const &pi_ref = &ival;
        改为:      const int *const &pi_ref = &ival;

■p131, L-8(英文版勘误)
原文:paramenter_list
更正:parameter_list


■p137, L13(英文版勘误)
原文:operator<<( ostream& os, const String &s )
更正:operator<<( ostream& os, String &s )


■p158, L11(英文版勘误)
原文:cout << cval << 'endl';
更正:cout << cval << endl;


■p170, L-11(英文版勘误)
原文:// equivalent initialiation as bitvec3
更正:// equivalent initialization as bitvec3


■p186, L2~L6(英文版勘误)
原文:

如果 _top 等于 0,empty() 传回 true;如果 _top 等于 _stack.size()-1,
full() 传回 true(上述 -1 是因为 vector 的元素编号和阵列一样,都是
从 0 开始起算)
inline bool iStack::empty() { return _top ? false : true; }
inline bool iStack::full()  {
               return _top < _stack.size()-1 ? false : true;

更正:

如果 _top 等于 0,empty() 传回 true;如果 _top 等于 _stack.size(),
full() 传回 true:
inline bool iStack::empty() { return _top ? false : true; }
inline bool iStack::full()  {
               return _top < _stack.size() ? false : true;


■p266, L12(英文版勘误)
原文:
if ( *c_iter % 2 )
     pvec_even->push_back( *c_iter );
else pvec_odd->push_back( *c_iter );
更正:
if ( *c_iter % 2 )
     pvec_odd->push_back( *c_iter );
else pvec_even->push_back( *c_iter );


■p266, L19(英文版勘误)
原文:vec->begin()+vec.size()/2;
更正:vec.begin()+vec.size()/2;


■p271, L15(英文版勘误)
原文:for ( ; iter != buffer.end(); iter++ );
更正:for ( ; iter != buffer.end(); ++iter );

■p271, 6.6.2 节以下,至本页尾(英文版勘误)
原文:文中多处使用 svec1 和 svec2
更正:请全部改为 slist1 和 slist2,以便与下一页配合

■p282, L-11(英文版勘误)
原文:string sentence = line1 + line2 + line3;
更正:string sentence = line1 + ' ' + line2 + ' ' + line3;
注意:拥有本书题解者,请一并修正。

■p289, L1(英文版勘误)
原文:

注意,第二个 iterator 所指的字元并不涵盖于删除范围之内。
erase() 的第三型式需要一个 iterator 做为引数,此 iterator 标示出一个
起始位置,从该位置之後直到字串结束为止的所有字元都会被移除。例如:
name.erase( name.begin() + 4 );
会使 name 变成 "Anna"。

更正:

注意,第二个 iterator 所指的字元并不涵盖于删除范围之内。这意味我们
产生出来的是 Annaabelle 而不是 Annabelle。于是,我使用 erase() 的
第三型式,以一个 iterator 做为引数,标示出欲移除的字元位置。
我把 endPos 当做引数,用以删除多馀的第二个 'a':
name.erase( endPos );
现在我们的 name 变成了 "Annabelle"。

日期:2001/07/23

补充:jau_lueng su 指出,以上更正後的叙述有误。
检讨:的确,lippman 在此处挖东补西,写得不好。
重新更正:
  注意,第二个 iterator 所指的字元并不涵盖于删除范围之内。这意味我们
  产生出来的是 Annaabelle 而不是 Annabelle。于是,我使用 erase() 的
  第三型式,以一个 iterator 做为引数,标示出欲移除的字元位置。
  name.erase( name.begin() + 4 );
  现在我们的 name 变成了 "Annabelle"。

■p289, L12(英文版勘误)
原文:string_object.insert( pos+1, 's' );
更正:string_object.insert( pos+1, "s" );


■p289, L-13(英文版勘误)
原文:posEnd // end position within new_string
更正:posEnd // number of characters to copy

■p289, L-1(英文版勘误)
原文:s3.assign( s1, 4 );
更正:s3.assign( s1, 0, 4 );

■p290, L6(英文版勘误)
原文:s3.append( s2, 4 );
更正:s3.append( s2, 0, 4 );

■p290, L8(英文版勘误)
原文:s3.assign( s1, 4 ).append( ' ' ).append( s2, 4 );
更正:s3.assign( s1, 0, 4 ).append( ' ' ).append( s2, 0, 4 );
补充:jau_lueng su 指出,append() 只能接受字串而非字元,上式应改为:
更正:s3.assign( s1, 0, 4 ).append( " " ).append( s2, 0, 4 );

■p293, L18(英文版勘误)
原文:hmm.replace( position, 4, 'x', 4 );
更正:hmm.replace( position, 4, 4, 'x' );
■p325, L-1(英文版勘误)
原文:inline bool iStack::size() { return _stack.size(); }
更正:inline int  iStack::size() { return _stack.size(); }

■p456, L-6(英文版勘误)
原文:void main() {
更正:int  main() {
■p463, L-4(英文版勘误)
原文:void func( int *parm ) {
更正:int  func( int *parm ) {

■p467, L9, L10(英文版勘误)
原文:format( a1 );  // calls format( int )  译注:a1 请见上一页
      format( a2 );  // calls format( unsigned int )  译注:a2 请见上一页
更正:format( e1 );  // calls format( int )  译注:e1 请见上一页
      format( e2 );  // calls format( unsigned int )  译注:e2 请见上一页

■p470, L-10(英文版勘误)
原文:void func( int *pi, string *ps ) {
更正:int  func( int *pi, string *ps ) {
■p472, L4(英文版勘误)
原文:void manip( int i1, int i2 ) {
更正:int  manip( int i1, int i2 ) {

■p605, L13(英文版勘误)
原文:remove_if_copy()
更正:remove_copy_if()


■p616, L17(英文版勘误)
原文:void checkRange( int, int );
更正:bool checkRange( int, int );


■p870, L-6(英文版勘误)
原文:for ( ; ix < _size  ++ix )
更正:for ( ; ix < _size; ++ix )


■p1049, L-7(英文版勘误)
原文:range_error exception
更正:out_of_range exception


■p1102, L16(英文版勘误)
原文:函式名称中的 g 表示重新指位动作是为了取得(getting)字元
      (用于 ofstream class object),p 则表示重新指位动作是为了放置
      (putting)字元(用于 ifstream class object)。
更正:函式名称中的 g 表示重新指位动作是为了取得(getting)字元
      (用于 ifstream class object),p 则表示重新指位动作是为了放置
      (putting)字元(用于 ofstream class object)。


■p1087, L-8(英文版错误)
原文:const lineSize = 1024;
更正:const int lineSize = 1024;


■p200, L19(中译本处理错误)
原文:for ( int ix = 0; ix < size; ++ix )
原文:for ( int ix = 1; ix < size; ++ix )


■p239, L3(原书错误)
原文: : _at_front(0), _at_end(0)
修改: : _at_front(0), _at_end(0), _size(0)
说明:如果没有这麽做,copy 之後,新的 list 的元素个数会出错


■p1000,L13(漏印)
原文:: ZooAnimal( name, onExhibit, "Bear" )
更正:: ZooAnimal( name, onExhibit, "Bear" ),
提示:最后加一个逗点


■p1000,L-7(英文版笔误)
原文:Endangered::critical )
更正:Endangered::critical ),


 


原文链接: http://blog.csdn.net/jaminwm/article/details/1967051

转载于:https://my.oschina.net/chen106106/blog/45348

你可能感兴趣的:(c/c++,人工智能)