→ gcobc12632 :一樓帥哥11/04 22:52
推 maple0935 :二樓帥哥11/04 22:52
推 howar31 :二樓帥哥11/04 22:52
→ howar31 :..11/04 22:52
→ maple0935 :五樓吃屎 11/04 22:53
→ maple0935 :幹 可以不要當簽名檔嗎... 11/04 22:53
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 220.133.35.4
推 kids1243:struct裡面不是就有一個next的指標了嗎? 03/30 21:38
對,但是那個不能直接叫出來,得先定義一個 node 型態的東西來叫他
可是 ostream 是在class外面,看不到private資料......
→ kids1243:每次建立一個新的node就要把cursor的next指向那個node 03/30 21:39
→ kids1243:好吧 C++我不熟 不要亂答好了 XD 03/30 21:42
→ ah7675:助教蠻有心的 好好把握這個課程跟練習 應該會蠻紮實的 03/30 21:42
我百分之四十二億九千四百九十六萬七千兩百九十六分同意你的說法!
因此我得想辦法撐過每個上機......ˊˋ
→ fireslayer:這是正常的linkedlist吧 03/30 22:15
是阿ˊˋ
→ leiyan:另外做個類別繼承再做operator<<如何? 03/30 22:55
助教說不能增加別的 class 或 friend function......
是這個意思嗎0.0?
→ karaokstar:自己在ListZipC寫個print function再丟進ostream裡? 03/30 23:58
→ karaokstar:應該說在List class內trace node 把node的資料都丟進 03/31 00:09
→ karaokstar:cstring內,最後return 這串string,在ostream再直接call 03/31 00:10
這個方法好像滿好實行的~(雖然要多一條 function 不過管他的)
來試試看......
推 andyjy12:把const copy出來 03/31 02:57
看不懂,囧。請問可以解釋的更清楚一點嗎0.0?
→ samuelcdf:為了不破梗,提示你一下外部函式需要goNext, current, 03/31 11:27
→ samuelcdf:rewind方法, 達成印初整個list的目的 03/31 11:29
→ samuelcdf:說明文件只有說goNext只在cursor不是null時才會設定 03/31 11:31
→ samuelcdf:/改變cursor和prev的值; 而current在cursor等於null時 03/31 11:35
→ samuelcdf:似乎也只能傳出null, 因此應該可以做為判斷list結尾的依 03/31 11:37
→ samuelcdf:據 03/31 11:37
難道你是哪位助教嗎OAO
→ samuelcdf:我不是啦. 只是覺得說得太明白就剝奪了你練習的機會 03/31 11:42
喔喔XD
那我就得先把那三個函式先寫出來了(眼神死)
→ samuelcdf:加油 :) 03/31 11:49
看到另一個一直困擾我的問題了......
像是goNext() 函式中,為了把 cursor 和 prev 往後移,需要把當前和下個 node 叫出來
可是我不知道要怎麼把這兩個 node 叫出來......
現在所有的函式都是卡在這一點,無法進行下去O_O
→ samuelcdf:這就是你要練習的部份啦, 實做方法可以使用那三個成員變 03/31 12:02
→ samuelcdf:數囉,再想想看吧 03/31 12:03
(慘叫)
我知道要用 head、cursor、prev 來實現這個目標
但也不能直接打什麼 prev.next 之類的東西......所以一直在這裡打轉
現在有一個想法,但不知道語法和規則上可不可行:
在 member function 裡先建幾個 node,把原本 prev、cursor 指著的資料存進去
然後再這樣連過去那樣連過去,達成實作這個函式的目標
可是很怕說這樣根本不會影響到整個list......
→ samuelcdf:head, cursor, prev, cursor->next 03/31 12:06
??0.0??
→ karaokstar:goNext中你code if內再加一行cursor = cursor->next 03/31 13:14
報告一下目前進度:
在大家的幫助之下,目前已經把 goNext、rewind、current 三個函式做出來了(待測試)
ostream 的部份,因為用前三個函式會動到 cursor 等指標的位置,會很麻煩
因此採用另外寫一個 member function 存資料,再用 ostream 直接印出來的方式
然後有個小問題是題目要求在輸出時還要把 cursor 現在指的資料前面加一個"@"
雖然再寫一個 member function 就可以解決了,可是這樣感覺好肥大......0.0
※ 編輯: o07608 來自: 220.133.35.4 (03/31 14:57)
報告進度-2
開始測試除了 remove、copy constructor、destructor 和 operator 以外的函式
然後每次跑的時候程式就當了 \0.0/
我好想狠狠的玩五個小時的WOW阿......Q囗Q
※ 編輯: o07608 來自: 220.133.35.4 (03/31 16:40)
把修改過的程式碼重新上傳一次0.0
ListZipC.h:http://codepad.org/yIHe1Z0b
ListZipC.cpp:http://codepad.org/msdc6vkH
※ 編輯: o07608 來自: 220.133.35.4 (03/31 17:12)
報告進度-3
一個問題還沒解決,另一個問題又接著來~
現在在得到samuelcdf板友的建議後,決定改回用rewind、current、goNext實作
先呼叫current來存下cursor指向的位址(我原本以為他是回傳指向的值)
然後用rewind初始化整條list後,用goNext一個個印出來
最後再用原本存的cursor位址把cursor設回去
現在遇到兩個問題:
第一個問題是如何把cursor和prev的位址再設定回去,這個應該再弄一個function就好了
另一個問題才麻煩:rewind的回傳值並不是const,但ostream的引數是const
而助教規定說不准用任何型態轉換把那個const去掉......
我是有想到說可能可以先寫出copy constructor
用它來幫忙,應該還省去重設cursor和prev的麻煩
可是助教恐嚇過我說copy constructor和destructor是最難的,最後再寫......
補上新的程式碼連結:
ListZipC.h:http://codepad.org/8rKTC017
ListZipC.cpp:http://codepad.org/1yTLMcnX
main.cpp:http://codepad.org/BJmYbgMK
※ 編輯: o07608 來自: 220.133.35.4 (03/31 21:58)