[問題] 請問stack實作的幾個問題

看板C_and_CPP作者 (1)時間10年前 (2013/12/19 01:19), 編輯推噓1(1014)
留言15則, 6人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) Linux 問題(Question): 想以class實作一個stack功能 除了基本的push, pop和取值之外 使用動態記憶體配置stack,加上了動態調整stack大小的功能 (push後資料量到達stack容量上限,則將容量*2) (pop後資料量剩下stack容量上限的一半,則將容量/2) code如下: main.cpp http://codepad.org/KS4171zs stack.cpp http://codepad.org/c7F7AfHQ stack.h http://codepad.org/gZiF7t0L 想請問 1. stack.h中的line 47,為何要用int *&iContainer? 2. 一樣是stack.h中的line 47 ChangeCapacity這支function裡,是先把舊空間的資料移到新空間,再把舊空間刪掉, 然後指到新空間。請問有更快速或簡潔的方法嗎?(例如可以省掉搬資料的動作) 3. stack.h中,class member function的定義前面沒有加inline則會出現 multiple definition的錯誤。 雖然main.cpp和stack.cpp都有#include "stack.h", 想請問已經有加上 #ifndef _STACK_H_ #define _STACK_H_ 這樣不是應該要能避掉multiple definition的錯誤了嗎?是我哪裡弄錯了嗎? @_@ 麻煩大家幫忙解惑一下 感恩 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 180.176.221.68

12/19 01:27, , 1F
1. 等同intptr &,他要把新空間的位址寫回iContainer
12/19 01:27, 1F

12/19 01:29, , 2F
2.realloc()自動搬,或是用linkedList之類實做容器
12/19 01:29, 2F

12/19 01:29, , 3F
3.include guard只能確保每個header只會被每個source
12/19 01:29, 3F

12/19 01:31, , 4F
include一次,非inline函數的定義只能出現在一個source
12/19 01:31, 4F

12/19 10:02, , 5F
用linked list搬資料超快
12/19 10:02, 5F

12/19 10:03, , 6F
切開重新接然後多的free掉
12/19 10:03, 6F

12/19 20:47, , 7F
謝謝
12/19 20:47, 7F

12/19 20:48, , 8F
3.如果程式碼很長就不適合用inline了,那還有什麼辦法嗎?
12/19 20:48, 8F

12/19 20:48, , 9F
但為什麼加了inline就能避掉這個error呢?
12/19 20:48, 9F

12/19 22:25, , 10F
member func定義寫到.cpp檔啊
12/19 22:25, 10F

12/19 22:32, , 11F
加inline向編譯器保證不管看到他們幾次內容一定都一樣
12/19 22:32, 11F

12/20 16:52, , 12F
請問 我在VC下 不同cpp寫同樣名稱的class 也沒有問題耶@@
12/20 16:52, 12F

12/20 16:52, , 13F
這該怎麼解釋呢?
12/20 16:52, 13F

12/20 20:17, , 14F
名稱相同對應位址並不同 除非你宣告extern才會找其他cpp
12/20 20:17, 14F

12/20 21:21, , 15F
感謝各位
12/20 21:21, 15F
文章代碼(AID): #1IiTaysx (C_and_CPP)