深度學習C++ : 校正檔 ( 西元 2007 年 10 月 03 日 ) 最新請參考 http://www.math.ncu.edu.tw/~ziyou/c++ [ 1] 譯文 implementation file --> 實作檔 [ 2] 54 頁 第 14 行 , j = 44 --> i = 44 [ 3] 59 頁 第 5 行到第 7 行 : C++也可以讓使用者 ... 的整數 --> 須注意一點, C++禁止使用者直接以整數數值來設定列舉型別變數 第 11 行, 兩者一樣 --> 正確 第 12 行, 與上式相同 --> 錯誤, 不可直接存入整數 第 13 行, 整行改成 cout << foo << '\n' ; // 印出整數 12 [ 4] 63 頁 倒 2 行, 空字串也是真 倒 2 行, 確為真 --> 卻為真 [ 5] 67 頁 第 9 行, B2 沒有對齊好 [ 6] 69 頁 第 17 行, 無能無力 --> 無能為力 [ 7] 70 頁 第 9 行 到 12 行整個改寫成 if ( 'A' <= ch && ch <= 'Z' ) ch = ( ch < 'N' ? ch + 13 : ch - 13 ) ; else if ( 'a' <= ch && ch <= 'z' ) ch = ( ch < 'n' ? ch + 13 : ch - 13 ) ; [ 8] 77 頁 倒 10 行 , 第一個雙引號前加 cout << [ 9] 97 頁 增加一題簡答題 unsigned a , b ; cin >> a >> b ; for ( int i = 0 ; i < b-a ; ++i ) { cout << a + i << endl ; } 若輸入的兩正數的 b 比 a 小, 請問程式是否進入迴圈內執行列印的動作 第 15 行, foo *= foo + 20 --> foo += i [ 10] 98 頁 第 12 題, 因數乘積 --> 質因數乘積 [ 11] 100 頁 倒 2 行, 透樂開獎 --> 樂透開獎 [ 12] 112 頁 5.4 節標題 : 動態記憶體 --> 動態記憶空間 [ 13] 118 頁 倒一行, (int*) --> int* [ 14] 119 頁 圖 5.1, (int*) --> int* 倒 6 至 倒 4 行, 將 r 改成 i, c 改成 j [ 15] 121 頁 第 2 行 , 列向量 (a) --> 行向量 (a) 第 3 行 , 行向量 (b) --> 列向量 (b) [ 16] 124, 184 頁 第 6 行, 都有些 --> 可能有些 [ 17] 127 頁 倒 8 行 型別資料 --> 資料型別 [ 18] 129 頁 倒 2 行, 都是 1 --> 是 1 [ 19] 142 頁 第 5 行, 初始值的初之前須空一格 [ 20] 161 頁 習題 15 題, 挪到第 4 章 [ 21] 162 頁 第 1 行作業 19 題, 此題修改成桃子大小為介於 [1,10] 之間的浮點數 [ 22] 166 頁 加上 footnote 於倒數 1 行的 改變右上角 事實上, 若將 char *d = "fish" 改成 const char *d = "fish" 就更清楚了 [ 23] 175 頁 增加一個 string 小範例 for ( int i = 1 ; i <= 3 ; ++i ) cout << setw(n+i) << string(2*i-1,static_cast('1'+i-1)) << end ; 1 222 33333 [ 24] 180, 749 頁 Q : Must be you so linear... --> Must you be so linear... [ 25] 184, 244 頁 兩章習題的第 1 題的 (c),(d),(e),(f) 題目重複 [ 26] 185 頁 第 10 題的第 1 行 , 四言 --> 五言 [ 27] 192 頁 最後一行, 出現在若干次 -> 去除 在 [ 28] 195 頁 倒 5 行, declarartion -> declaration [ 29] 198 頁 第 1 行左值的上標 由 27 -> 28 [ 30] 205 頁 後 1 行, 最後一個字 以 -> 能 [ 31] 207 頁 第 7 行, 將設定三維陣列的元素都為 ==> 將三維陣列的所有元素都設定為 [ 32] 213 頁 第 13 行 , int * char_set --> char * char_set 倒 10 行 , int * char_set --> char * char_set [ 33] 224 頁 倒 11 行, 整數 n 的由右邊數來的 -> 整數 n 由右邊數來 倒 12 行, c 的位元位置 -> c 個位元位置 [ 34] 245 頁 第 2 行, 標頭檔 --> 標頭 第 2 行, 函式標頭檔 -> 函式標頭部份 [ 35] 274 頁 倒 5 行 , 末尾加分號 [ 36] 282 頁 程式碼的兩個建構函式分別改成 Fraction( int d , int n = 1 ) { Fraction( int n , int d = 1 ) { denominator = d ; numerator = n ; ==> numerator = n ; denominator = d ; } } Fraction( int d , int n = 1 ) : denominator(d) , numerator(n) {} ==> Fraction( int n , int d = 1 ) : numerator(n) , denominator(d) {} [ 37] 283 頁 第 13 行, int a --> int& a [ 38] 298 頁 第 19 行, 增加了 -> 增加 [ 39] 299 頁 習題 第 2 題, 集合程式右上加註頁碼 習題第 1 題的第 2 行起到第 3 行的第 1 個字須修改成 現 a = b = c 編譯錯誤, 但 b = c 與 a = b 卻為正確 [ 40] 300 頁 第 6 題的第 4 行 , 左推 --> 右推 [ 41] 302 頁 第 4 行, *ticket[NO] ---> **ticket 第 11 題移至 第 2 題 [ 42] 308 頁 倒 2 行, int num , int den --> int n , int d 最後一行, 右大括號之後須加上分號 [ 43] 309 頁 第 3 行, Fraction& oprerator --> Fraction operator 倒 14 行, int den --> int d 倒 13 行, int num --> int n 倒 12 行, Fraction(num,den) --> Fraction(n,d) [ 44] 312 頁 倒 10 行, int den --> int d 倒 9 行, int num --> int n 倒 8 行, Fraction(num,den) --> Fraction(n,d) [ 45] 320 頁 書本的第 320,321 頁與 318,319 頁重複 且缺少原稿 book_v2.pdf 的 413,414 頁, 缺頁在書本的 414 頁與 415 頁之間, 但不是原稿的問題, 問題發生在印刷廠 也就是書本的 320-414 頁之間的索引都多兩頁 [ 46] 322 頁 倒 6 行, Fraction& --> const Fraction ( 原因見 : More effective C++ P32-P33 ) [ 47] 323 頁 第 7 行, Fraction& --> const Fraction 倒 10 行, Fraction& --> const Fraction [ 48] 329 頁 第 3 行 , 末尾加分號 [ 49] 338 頁 倒 10 行, A + c --> A += c 倒 9 行, A - c --> A -= c [ 50] 340 頁 第 5 行 : new (int)[r*c] ---> new int[r*c] ; 第 7 行 : *(data+i*r+j) ---> *(data+i*c+j) 第 11 行 : i * row ---> i * col 第 14 行 : i * row ---> i * col [ 51] 342 頁 倒 3 行, 50 階乘 -> 40 階乘 [ 52] 347 頁 第 11 行, 英文的句點要改成中文的句點 [ 53] 348 頁 倒 6 行之後的程式碼須修正 最後的數字會重複列印兩次, 當所有的資料讀取完畢, 且尚未 讀到檔案末尾時, infile.eof() 仍為假, 此時程式仍會進入 迴圈內執行, 但因為已沒有資料可供讀取, 執行 infile >> i 會失敗, i 的原有數值不便, 當執行 cout << i << endl 時, 則會再一 次列印已有的 i 值, 也就是檔案的最後一筆整數資料 末尾程式碼改為 while ( 1 ) { infile >> i ; if ( infile.eof() ) break ; cout << i << endl ; } eof() 是在串流物件在讀到檔案的末尾時其值才會為真, 重點在遇到. 若僅是讀完檔案的最後一筆資料, 但尚未讀到檔案末尾, 則其值仍為假, 因此使用上要特別留意 [ 54] 352 頁 第 18 行, 256 個字元 --> 255 個字元 [ 55] 353 頁 表格 11.5 說明文字 , 成員函式 --> 一般函式 [ 56] 354 頁 倒 8 行, 去除句點之後的逗點 [ 57] 358 頁 倒 12 行 , setf(0 --> unsetf( [ 58] 359 頁 表格 11.7 第二行第二列 , setf(0 --> unsetf( [ 59] 363 頁 表格 11.8 的第 4 行 : 小數點 --> 末尾的零 [ 60] 370 頁 倒 3 行 , outfile.open --> outfile1.open [ 61] 371 頁 表格之後第 5 行 , outfile.open --> outfile2.open [ 62] 375 頁 第 11 行, cout.close() --> foo.close() [ 63] 379 頁 第 6 行, uuencode 的右上角加入相關頁碼 [ 64] 382 頁 將第 16 行末尾的註解移到第 21 行末尾 [ 65] 396 頁 第 3 行, 行數 , 與字數 --> 字數 , 與行數 [ 66] 397 頁 倒 11 行, 81 --> 91 [ 67] 398 頁 第 26 題挪到第 10 章 第 10 行 , 6789+\ --> 6789+/ [ 68] 403 頁 第 13 行, enum gender = { female , .. --> 去除等號 [ 69] 409 頁 第 10 行, class --> Class [ 70] 414 頁 見 320 頁修正事項 [ 71] 417 頁 倒 12 行, c1() --> c2() 倒 11 行, c2() --> c3() [ 72] 418 頁 倒 1 行, foo 為 C --> foo 為 A 第 3 行, FOO::b1() 為 FOO --> Base::a() 為 Base 第 7 行, return c1() --> return c3() 圖形的說明 class B { ... } --> class B { ... } ; class C { ... } --> class B { ... } ; class A , public B , public C { ... } 之後須加 分號 [ 73] 419 頁 第 19 行, // 明確地 .... --> 註釋改成 // 須使用 B::abs(2) 或 C::abs(2) 圖形的右邊說明每筆之後都須加 分號 [ 74] 420, 425, 427, 429 頁 圖形的右邊說明每一行都須加上 分號 [ 75] 425 頁 第 14 行的註解與前一行註解對齊, 再加上 // 第 17 行, 印出 : 1 --> 印出 : 7 [ 76] 427 頁 第 18 行的註解與前一行註解對齊, 再加上 // [ 77] 429 頁 第 8 行的註解與前一行註解對齊, 再加上 // [ 78] 432 頁 末兩行改為, 解構函式執行的方式則是由衍生類別自身開始, 一層一層往上依次執行, 直到執行完最頂層的基礎類別的解構函式為止. [ 79] 433 頁 第 3 行, 應注意事項與之前的建構函式並無不同 改成 應注意的事項與在第九章(上標 272-275 頁)的說明相同 [ 80] 434 頁 第 3 行, class A ; --> class A { ... } ; 第 4 行, class B ; --> class B { ... } ; [ 81] 442 頁 倒 12 行, 去除第二個 "一個" [ 82] 444 頁 倒 7, 9 行, passanger_no --> passenger_no [ 83] 445 頁 第 9, 10 行, passanger_no --> passenger_no 第 17 行, Car* --> Car Sedan* --> Sedan [ 84] 455-458 頁 car.cc 程式碼, passanger_no --> passenger_no [ 85] 459 頁 第 8 行 , ) } --> ) { [ 86] 461 頁 倒 8 行, Oboe 不是單簧管, 是雙簧管 [ 87] 467 頁 倒 1 行, Geometric_Translation --> Translation [ 88] 468 頁 第 5 行, Geometric_Translation --> Translation [ 89] 475 頁 第 2 行, resize 加註索引上標 [ 90] 476 頁 第 9 行, Yellow 往前移一格 [ 91] 490 頁 程式第 175 行 : get_division( int d ) --> get_division() const [ 92] 494 頁 第 7 行, 第一個範例的右上角加上參考頁碼 倒 8 行, 類別範例的右上角加上參考頁碼 [ 93] 495 頁 第 8 行, 生成程式的右上角加上參考頁碼 [ 94] 502 頁 倒 7 行 , 加 return 0 ; [ 95] 504 頁 倒 14 行, bar[S] --> bar[3] 倒 9 行, (3) ) -> (3)) 去除空白字元 [ 96] 505 頁 第 6 行, max = 0 --> max = foo[index1] 第 7 行, i = index1 --> i = index1+1 [ 97] 507 頁 倒 10 行, 編譯前 --> 編譯時 [ 98] 508 頁 第 4 行, ctr -> 建構函式 倒 5 行, foo -> pt [ 99] 509 頁 第 5, 9 行的全型逗點改為一般逗點 main() 函式最後加上 return 0 ; [100] 510 頁 第 9, 10 行, 須要加上物件的名稱 [101] 511 頁 第 6 , 7 行改成 double square(double a) { return a * a ; } 第 13 , 14 行 之後加上以下三行 C++執行以下的方式 cout << compute( square , 1.1 ) ; cout << compute( cubic , -3 ) ; [102] 519 頁 倒 9 行, 所有的 int 之後都須加上 參考算符 & [103] 533 頁 第 5 行, CATTCATT --> CATTCAATT [104] 552 頁 倒 4 行, futile[4] -> futile[6] [105] 555 頁 第 6 行, umbero --> Umbero [106] 556 頁 第 5-8 行, 改成以下的 3 行 Locutus : "I am Locutus, of Borg. Your life, as it has been, is over." -- "The Best of Both Worlds" 最後一行 : 字元陣列少一行, 須為 7 x 7 矩陣 [107] 559 頁 倒 6 行, "資 -> " 資 [108] 561 頁 第 1 行 加上 ... 第 8 行, "資 -> " 資 [109] 562 頁 第 2 行 與 倒 4 行, 加上 return 0 ; [110] 575 頁 倒 2 行, 83 --> 512 [111] 576 頁 第 16 行, 所有的 Point --> const Point& 倒 12 行, ostream operator --> ostream& operator [112] 577 頁 倒 8 , 9 行, T --> T& [113] 582 頁 表格 第三行, #include --> #include [114] 589 頁 第 1 行, 其個數剛好 --> 對元素緊鄰的容器而言, 其個數剛好 [115] 592 頁 倒 2 行, d = aaabb --> d = aaaaa f [116] 594 頁 倒 5 行 , 末尾加句點 [117] 604 頁 第 10 行 , 第十三章 --> 第十四章 [118] 606 頁 倒 12 行, 加入一行 #include [119] 617 頁 倒 6 行, operator( double x ) --> operator()( double x ) [120] 618 頁 程式碼 28 行, fn(dx*i) --> fn(a+dx*i) [121] 619 頁 程式碼 44 行, fn(dx*i) --> fn(a+dx*i) [122] 626 頁 倒 14 行, operator( double --> operator()( double 倒 9 行, operator( double --> operator()( double 第 4, 7 行, operator( double --> operator()( double [123] 635 頁 倒 6 行, begin()+n --> begin()+i [124] 641 頁 倒 12 行, 鏈結 --> 鏈節 [125] 642 頁 圖形說明, 鏈結 --> 鏈節 [126] 644 頁 第 6 行, 數字 72 往前一格 倒 5 與 9 行, 末尾須加分號 倒 3 行, 加 return 0 ; [127] 652 頁 第 6 行, i < size --> i < size-1 [128] 655 頁 第 5 行, 第一個逗號, 改成第二個逗號型式 [129] 657 頁 倒 12 行, '其' 的後面的空白須去除 [130] 658 頁 第 2 行的 b 是接在第 1 行的註解之後 [131] 662 頁 第 6 行, 項次方 --> 次方項 [132] 681 頁 倒 2 行, 矩陣範例加上頁碼上標 (658) [133] 682 頁 第 9 行, 第 15 題須用到 proxy class, 不適合的習題 [134] 690 頁 第 13 行 , pair.h --> utility [135] 703 頁 倒 5 行, out --> return out 倒 7 , 8 行, foo --> s [136] 729 頁 第 7 行, 唐詩範例加上參考頁碼 第 8 行, 唐詩範例加上參考頁碼 [137] 730 頁 第 7 行 , 而資料 --> 使得資料 [138] 731 頁 第 1 行, dirname --> Dirname [139] 734 , 740 頁 表格的第 1 行第 2 欄 , 用途 --> 名稱 [140] 735 頁 倒 1 行 , 中文逗點 --> 英文逗點 第 3 - 8 行 , 改為 在以上最後一行,當程式執行 *iter = i 後,插入迭代器仍然指向原先的位置,並不會移動。 因此被插入的資料會依次儲存,foo 串列內則會儲存 1 到 9 等九位數字。 [141] 741 頁 倒 11 行 , istream_iterator() --> istream_iterator() [142] 750 頁 第 5 行 , b s --> y s [143] 759 頁 表格的第 4 行第 2 欄 , 在序列找尋 --> 在序列內找尋 [144] 772 頁 第 9 行 與 倒 6 行 , 回傳型別改為 OutIter [145] 775 頁 第 4 行, 元素 --> 元素個數 [146] 778 頁 第 6 行, 73 往前一格對齊 [147] 782 頁 第 5 行 , 回傳型別改為 OutIter [148] 788 頁 第 2 行 : 排序 --> 排列 倒 12 , 13 行 : 排序 --> 排列 [149] 789 頁 倒 2 行 , 排序 --> 排列 [150] 790 頁 倒 1 , 3 行 : class RandIter --> class RandIter , class Comp [151] 793 頁 第 5 行 , middle 的元素 --> middle 指向位置之後的元素 [152] 794 頁 倒 6 與 9 行 , void --> RandIter [153] 802 頁 第 14 行, 29 往前一格對齊 [154] 806 頁 第 12 行 , class Inter2 --> class Inter2 , class Comp [155] 807 頁 第 6 行 , set_sysm --> set_sym [156] 816 頁 第 16 行 , (first1,last) --> (first1,last1) [157] 817 頁 倒 4 行改成以下兩行 : template < class InIter1 , class InIter2 , class T , class BinFn1 , class BinFn2 > 倒 1 行 , BinFn fn1 , BinFn fn2 --> BinFn1 fn1 , BinFn2 fn2 [158] 821 頁 倒 3 行, 去除方程式 Summation 的數學符號, 並將 i 改成 n [159] 822 頁 第 1 行, 第 3 題無解 ***** [160] 823 頁 第 8 , 9 行 , 公式內對調 a , b 的位置