作者Hyozero (1)
看板C_and_CPP
標題[問題] 請問stack實作的幾個問題
時間Thu Dec 19 01:19:51 2013
開發平台(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
→ azureblaze:1. 等同intptr &,他要把新空間的位址寫回iContainer 12/19 01:27
→ azureblaze:2.realloc()自動搬,或是用linkedList之類實做容器 12/19 01:29
→ azureblaze:3.include guard只能確保每個header只會被每個source 12/19 01:29
→ azureblaze:include一次,非inline函數的定義只能出現在一個source 12/19 01:31
推 wuliou:用linked list搬資料超快 12/19 10:02
→ wuliou:切開重新接然後多的free掉 12/19 10:03
→ Hyozero:謝謝 12/19 20:47
→ Hyozero:3.如果程式碼很長就不適合用inline了,那還有什麼辦法嗎? 12/19 20:48
→ Hyozero: 但為什麼加了inline就能避掉這個error呢? 12/19 20:48
→ shadow0326:member func定義寫到.cpp檔啊 12/19 22:25
→ azureblaze:加inline向編譯器保證不管看到他們幾次內容一定都一樣 12/19 22:32
→ QQ29:請問 我在VC下 不同cpp寫同樣名稱的class 也沒有問題耶@@ 12/20 16:52
→ QQ29:這該怎麼解釋呢? 12/20 16:52
→ danny8376:名稱相同對應位址並不同 除非你宣告extern才會找其他cpp 12/20 20:17
→ Hyozero:感謝各位 12/20 21:21