♥ 學習筆記Learning 程式語言 Coding

[C++程式設計] 學習筆記─建立資料結構(1/5)

我必須要老實說,在我大學學到資料結構時,我對他是一點感覺都沒有(好人卡~遞…給資料結構) 老師為什麼要苦口婆心的跟我說有資料結構有多好多重要呢?我一點都看不出來T________T” 直到某一天,我的報應來了…不對,是我學習的機會來了。
F200903180913432809318601.jpg   

稍微大一點有對應關係的輸入檔,沒有資料結構就真的等著死翹翹、拍料料 o(><;)o o 有可能執行到天荒地老,都不出來,還直接給你Crash掉(題外話:我有個工程師朋友叫做Crash說XDDD)

好了,到了第二部分,我們需要解決什麼問題呢?

 

※建立可應用的資料結構 

Q:輸入了B、C檔案後,我們需要剖析這兩個檔案,並且要將B檔與C檔之間的欄位建立對應關係,由於B檔本身是由點構成的資訊檔,我們同時也需要將他建立成圖形(Graph),而C是每種類型的點所代表的性質,並且讓圖形裡的每個點都能找到對應的性質。

A:因此,我們開始來拆解這段步驟需要做的事情。

1. 剖析B檔案
2. 將剖析後的B檔案,建立成對應的圖形。
3. 剖析C檔案
4. 將剖析後的C檔案,建立與圖形的點對應的關係。
5. 為了讓速率提升,依照B、C檔案的格式,建立較有效率的對應表。
6. 建立好資料結構後,提供查表功能。

由於這裡我們開始要給程式做截然不同的工作,因此建議新開一個C++檔案,讓各別的C++檔案獨自做不同的事情以方便管理;這時候就牽扯到一個問題了,請問,多個檔案的C++程式,應該怎麼連結在一起執行呢?

這是一個基本的問題,可是小的我,可是連這基本的問題都有點害怕的T__________T”  (拍謝,我真的很嫩!)

所以這篇就來討論這個問題囉!^__________^”
(高手請滾開!!!啊~不對~請大人移開尊腳!這裡是幼幼班等級。)

這裡牽扯到標頭檔header(.h)這個東西的概念。
根據書上的說明 ,表頭檔(header files)經由前置處理器include指令,成為程式的一部分。通常會用#這個符號標示出來,再來處理這個指令的程式,稱為前置處理器。

# include 指令會讀入指定的檔案內容,有兩種形式…

#include <some_file.h>
#include “my_file.h”

用<>括起來的,表示此檔案是個專案表頭檔或者是標準表頭檔,
如果檔名是用””括起來,則代表示我們自己所提供的標頭檔,那麼搜尋目錄就以我們存放的目錄為準。

要注意的是被含入的檔案,可能也有一個#include檔案,二次含入會形成巢狀的狀況,因此可以透過「條件式指令」來避免這種狀況。
#ifdef HELLO_H
#define HELLO_H
#endif 

條件式指令:
# ifndef

這裡要做的事,會先檢查HELLO_H是否被定義過,如果尚未被定義過,條件指令會被判定為True,從#ifdef到#endif的動作都會被處理,相反的就會被忽略;這樣的方式確保所有的前置處理器,只被include一次,但必須有個前提,就是沒有任何兩個header file依賴相同的兩個前置處理器常數。

前面照本宣科完,我還是沒有感覺…Orz||||

 

吼吼吼~~~~算了算了!!!!>”< 等到我想通了再補充清楚吧!(被毆飛)

這次會選擇紀錄下這次完成專題的過程,主要是希望跟我一樣對程式有過一知半解,卻苦無能力沒有辦法靠自己完成大型一點的專題的同學,也能夠少碰一點冤枉路,因為我一度曾經想要完全放棄任何與程式設計有關的工作,這算是一個練習,練習自己在每個過程好好思考解決方案,而不是動不動就知難而退;從今天開始,知難而”進”吧!有一天我們放棄寫程式的生活,絕對不是因為討厭或害怕寫程式,而只是因為我們的選擇。

About the author

蕾咪

蕾咪,來自台東,卻不定期旅居歐洲的工程師女孩,身兼作家、部落客、創業家等多重身份。畢業於台大電子所,曾在義大利商與美商擔任研發工程師;走訪世界後,發現對台灣有段割捨不了的愛,讓我們一起努力成為想要的自己吧!:) 合作邀稿請聯繫:ramihaha@gmail.com

2 Comments

  • 這裡應該是 #ifndef ( if not defined )

    用途是如果沒有定義過這個H檔,那就用這份檔案定義,避免重複定義H檔。

    你用#ifdef的話,變成要有定義過一樣名稱的H檔,然後你這份才會作用,把它蓋過 (搞什麼鬼…)。

Leave a Comment