Objective 客觀來說
繼上次只能夠處理演算法改良,這次時間上稍微充裕一些,多花一些時間研究I/O 和 pointer 的議題。I/O 的部份:
認識到新的I/O的分別是:
輸入:比 scanf()更快的 getline() (API 說明文件: getline(3) - Linux man page)
輸出:比 printf()更快的 putchar()
Pointer的部份:
將指標傳入遞迴函式的時候,發生錯誤怎辦?
解決方法: c passing pointer to recursive function
怎麽直接讀取一行: getline()的部份:
How to read a line from the console in C?
注意:
getline()
ssize_t getline(char **lineptr, size_t *n, FILE *stream);
文件中提到
If *lineptr is NULL, then getline() will allocate a buffer for storing the line, which should be freed by the user program. (In this case, the value in *n is ignored.)
也就是說放入 getline() 的 *lineptr 為空的情況底下,getline()會自動幫程式動態配置一個緩存的空間
Alternatively, before calling getline(), *lineptr can contain a pointer to a malloc(3)-allocated buffer *n bytes in size. If the buffer is not large enough to hold the line, getline() resizes it with realloc(3), updating *lineptr and *n as necessary.
如果緩存不夠大,有必要的話,getline()會使用 realloc() 來重新分配緩存資源
最後一項 FILE *stream 是 input file handle
速度上的比較可以參考這篇 Fastest way to output a 2D array of char in C
Elapsed times are:
0:09.46 with printf,
0:07.75 with putchar,
0:05.06 with putchar_unlocked.
Reflective 感受
你要如何形容今天的情绪:自己獨立完成作業並通過,比起上次提交多次還不過的心情完全不同
Interpretive 解釋反思
發現上次可以改進的地方:1. 由於上次過於想要一次就把架構在腦袋中實現,但是程式實做能力還跟不上,加上時間壓力讓自己的恐懼感壓垮理智。恐慌的時候讓我嚴重降低思考判斷能力。像是YEF的一階淘汰、分手失戀的時候那種腦袋瞬間當機的感覺,我想自己痛到骨髓的那種感覺,比別人都清楚
這次改採用一個步驟一個步驟的測試,每個步驟的輸出都完全正確之後,再前進到下一步,雖然笨,但是有效。
額外發現,再思考問題的時候,有注意到系統一(詳參快思慢想)潛意識的思維幫助我檢查了一些問題,並告訴我答案,當下我的系統二並沒有四思考,覺得有點特別,想要讓自己的系統二能夠跟上系統一個思考速度(另一個時刻是閱讀的時候,突然感覺自己的理解力視窗突然放大,但是幾秒候又回復平常的速度)。
2. 上次忘記補上程式碼的解說,這次有記得,避免疏忽冤枉失分(莫非定律,"以為"不會是大問題,結果真的發生的慘痛經歷)
3. 太急著想要完成一件需要深入思考的任務,往往都是失敗收場。所以,再解決一個問題以及嘗試實做的過程,耐著性子把說明文件、網路上的資料吸收,基礎觀念搞懂(ex pointer ),下次就不用還要重新理解一次
Decisional 修正行動
有哪些工作需要明天继续努力:
將基本功 I/O、pointer、array這些打磨清楚,比起這次將作業做出來,但有些實作細節還停留在知其然而不知其所以然的階段。
這個階段如果已經搞清楚,有助於降低日後的恐慌感
這個階段如果已經搞清楚,有助於降低日後的恐慌感
沒有留言:
張貼留言