?? 勘誤:c++ primer中文版.txt
字號:
日期:2001/07/23
■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"。
日期:2001/10/07
■p289, L12(英文版勘誤)
原文:string_object.insert( pos+1, 's' );
更正:string_object.insert( pos+1, "s" );
日期:2001/07/23
■p289, L-13(英文版勘誤)
原文:posEnd // end position within new_string
更正:posEnd // number of characters to copy
日期:2001/07/23
■p289, L-1(英文版勘誤)
原文:s3.assign( s1, 4 );
更正:s3.assign( s1, 0, 4 );
日期:2001/07/23
■p290, L6(英文版勘誤)
原文:s3.append( s2, 4 );
更正:s3.append( s2, 0, 4 );
日期:2001/07/23
■p290, L8(英文版勘誤)
原文:s3.assign( s1, 4 ).append( ' ' ).append( s2, 4 );
更正:s3.assign( s1, 0, 4 ).append( ' ' ).append( s2, 0, 4 );
日期:2001/07/23
補充:jau_lueng su 指出,append() 只能接受字串而非字元,上式應改為:
更正:s3.assign( s1, 0, 4 ).append( " " ).append( s2, 0, 4 );
日期:2001/10/07
■p293, L18(英文版勘誤)
原文:hmm.replace( position, 4, 'x', 4 );
更正:hmm.replace( position, 4, 4, 'x' );
日期:2001/07/23
■p325, L-1(英文版勘誤)
原文:inline bool iStack::size() { return _stack.size(); }
更正:inline int iStack::size() { return _stack.size(); }
日期:2001/07/23
■p456, L-6(英文版勘誤)
原文:void main() {
更正:int main() {
日期:2001/07/23
■p463, L-4(英文版勘誤)
原文:void func( int *parm ) {
更正:int func( int *parm ) {
日期:2001/07/23
■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 請見上一頁
日期:2001/07/23
■p470, L-10(英文版勘誤)
原文:void func( int *pi, string *ps ) {
更正:int func( int *pi, string *ps ) {
日期:2001/07/23
■p472, L4(英文版勘誤)
原文:void manip( int i1, int i2 ) {
更正:int manip( int i1, int i2 ) {
日期:2001/07/23
■p605, L13(英文版勘誤)
原文:remove_if_copy()
更正:remove_copy_if()
日期:2001/07/23
■p616, L17(英文版勘誤)
原文:void checkRange( int, int );
更正:bool checkRange( int, int );
日期:2001/07/23
■p870, L-6(英文版勘誤)
原文:for ( ; ix < _size ++ix )
更正:for ( ; ix < _size; ++ix )
日期:2001/07/23
■p1049, L-7(英文版勘誤)
原文:range_error exception
更正:out_of_range exception
日期:2001/07/23
■p1102, L16(英文版勘誤)
原文:函式名稱中的 g 表示重新指位動作是為了取得(getting)字元
(用於 ofstream class object),p 則表示重新指位動作是為了放置
(putting)字元(用於 ifstream class object)。
更正:函式名稱中的 g 表示重新指位動作是為了取得(getting)字元
(用於 ifstream class object),p 則表示重新指位動作是為了放置
(putting)字元(用於 ofstream class object)。
日期:2001/07/23
================================================================
以上已於五刷(2001 修訂版)更正完成。
以下暫請讀者自行更正:
(注意,Lm 表示第 m 行,L-n 表示倒數第 n 行)
■p1087, L-8(英文版錯誤)
原文:const lineSize = 1024;
更正:const int lineSize = 1024;
感謝:jjhou
日期:2001/09/25
■p999, L20(補充)
原文:Panda::Panda( string name, bool onExhibit=true )
補充:請在行後加上注解: // 有些編譯器不允許在此再次設定預設值 true
感謝:jjhou
日期:2001/12/22
■p1164, L14(英文版錯誤)
原文:stable_sort(...);
更正:partial_sort(...);
感謝:jjhou
日期:2001/12/31
■p1165, L1(英文版錯誤)
原文:stable_sort(...);
更正:partial_sort_copy(...);
感謝:jjhou
日期:2001/12/31
■p271, L15(英文版錯誤)
原文:for ( ; iter != buffer.end(), ++iter)
更正:for ( ; iter != buffer.end(); ++iter)
感謝:Solstice
日期:2002/01/25
■p561, L4(英文版錯誤)
原文:enum EHstate { noErr, zeroOp, negativeOp, severeError };
更正:enum EHstate { noErr, zeroOp, negativeOp, severeErr };
感謝:jjhou
日期:2002/02/15
■p322, L14(中譯本處理錯誤)
原文:while ( intStack.empty() == false )
更正:while ( intStack.empty() == false ) {
感謝:hzm21
日期:2002/02/15
■p520, L5(英文版誤)
原文:// (introduced in Section 2.4)
更正:// (introduced in Section 2.5)
感謝:hzm21
日期:2002/02/15
■p525, L-5(多一個字)
原文:此一呼叫并并沒有其他候選函式
更正:此一呼叫并沒有其他候選函式
感謝:hzm21
日期:2002/02/15
■p611, L5(錯別字)
原文:導至
更正:導致
感謝:hzm21
日期:2002/02/15
■p211, L13(錯別字)
原文:然而冒號(;)不能省略
更正:然而分號(;)不能省略
感謝:Uranus
日期:2002/03/02
■p259, L17(錯別字)
原文:并同時在 vector 中安插 10,000 個元素什時,
更正:并同時在 vector 中安插 10,000 個元素時,
感謝:Uranus
日期:2002/03/28
■p362, 練習 7.12 題目 (易起誤會,重新修潤)
原文:請將 factorial() 重寫,使它成為一個非遞回函式,
而是一個迭代(iterative)函式。
更正:請重寫 factorial(),使它不再是個遞回(recursive)函式,
而成為一個迭代(iterative)函式。
提醒:如果您有《C++ Primer 題解》,也請一并修正(p142)
感謝:yeka
日期:2002/05/23
■p653, L17 (誤譯)
原文:我們也可以在 member function 指標型別中宣告函式叁數和傳回值型別,
還可以指定預設引數。
原文:我們也可以將 member function 指標型別作為函式宣告中的叁數和傳回值型別,
還可以指定預設引數。
感謝:steven guan
日期:2002/05/31
■p200, L19(中譯本處理錯誤)
原文:for ( int ix = 0; ix < size; ++ix )
原文:for ( int ix = 1; ix < size; ++ix )
感謝:Aaron
日期:2002/05/31
■p239, L3(原書錯誤)
原文: : _at_front(0), _at_end(0)
修改: : _at_front(0), _at_end(0), _size(0)
說明:如果沒有這麼做,copy 之後,新的 list 的元素個數會出錯
感謝:jjhou
日期:2001/01/15
備注:本錯誤先前已列出,應於第五刷(2001修訂版)紙本上修改完成。
但疏忽未改,特再次提醒。
■p1000,L13(漏印)
原文:: ZooAnimal( name, onExhibit, "Bear" )
更正:: ZooAnimal( name, onExhibit, "Bear" ),
提示:最後加一個逗點
感謝:jaulueng
日期:2002/06/01
■p1000,L-7(英文版筆誤)
原文:Endangered::critical )
更正:Endangered::critical ),
提示:最後加一個逗點
感謝:jaulueng
日期:2002/06/01
■p260,L-3
原文:為了定義一個 container object(循序容器),
更正:為了定義一個循序容器物件本身,
感謝:Thomas Tam
日期:2002/06/02
■p589~p592(英文版錯誤一大堆)
0. 這四頁時而使用 int,時而使用 Int(定義於 p589 的一個 class)。
中文版第一刷都是正確的,但後來誤加修改,反而不正確了。以下標記出所有
用到 Int(而非 int)之處:
p589,L-6 Int Ival1, IVal2, Ires;
p590,L-7 modulus<Int> IntModulus;
p590,L-1 Ires = UnaryFunc( negate<Int>(), Ival1);
p591,L-9 less<Int> IntLess;
p592,L15 logical_not<Int> IntNot;
1. p589, class Int 應添加以下 member function :
operator int() const { return _val; } // 轉換函式
這是因為 p590 之模數(Modulus)運算:
modulus<Int> IntModulus;
Ires = IntModulus(IVal1, IVal2);
會喚起 Int::operator%(int), 但叁數 Int IVal2 需先轉換為 int 才行。
所以需要一個 Int -> int 的轉換函式如上。
2. p589,L-8, p590,L-15, p591,L10 各有 complex,應改為諸如 complex<double>
3. p591 之每一種運算的最後一行均應加上 bind2nd(),例如
equal_to<string>(), sval1
應改為:
bind2nd(equal_to<string>(), sval1)
再如:
not_equal_to<string>(), sval1
應改為:
bind2nd(not_equal_to<string>(), sval1)
依此類推。
4. p591 每一種運算中的第一個運算均應傳回 bool,例如
sres = stringEqual( sval1, sval2);
cres = complexNotEqual( cval1, cval2);
ires = intGreater( ival1, ival2);
...
書上卻以 bool 以外的型別來接受運算結果。雖然(也許)可自動轉換,但沒有意義。
我建議最好準備一個 bool 變數:
bool bres; // 加在 p589 下方原 6 個變數定義處。
然後將上述運算都改為:
bres = stringEqual( sval1, sval2);
bres = complexNotEqual( cval1, cval2);
bres = intGreater( ival1, ival2);
...
5. p592,L11,L12 之 intSub 應改為 intOr
6. p592 的 ■Logical Not 運算下面第二行:
Ires = IntNot( IVal1, Ival2 );
應改為
Ires = IntNot( IVal1 );
7. p592 每一種運算中的第一個運算均應傳回 bool,例如
ires = intAnd( ival1, ival2 );
ires = intOr( ival1, ival2 );
Ires = intNot( Ival1 ); // 此式只需一個叁數,見上述第 6 點)
...
書上卻以 bool 以外的型別來接受運算結果。雖然(也許)可自動轉換,但沒有意義。
我建議最好準備一個 bool 變數(如上述第 4 點),然後將上述運算都改為:
bres = intAnd( ival1, ival2 );
bres = intOr( ival1, ival2 );
bres = intNot( Ival1 ); // 此式只需一個叁數,見上述第 6 點)
感謝:jjhou
日期:2002/09/14
■p1102,L14
原文:
更正:
感謝:
日期:2002/06/02
--- the end
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -