Re: [問題] 指標大小

看板C_and_CPP作者 ( )時間14年前 (2011/05/30 20:27), 編輯推噓1(1016)
留言17則, 6人參與, 最新討論串2/2 (看更多)
※ 引述《ganlinliu ( )》之銘言: : 標題: [問題] 指標大小 : 時間: Sun May 29 21:59:37 2011 : 開發平台(Platform): (Ex: VC++, GCC, Linux, ...) : Borland C++ Builder : 問題(Question): : 想請問一下 假如我有一筆類別a的資料 : 資料的筆數是需動態增減的 : class a : { : }; : a *ptr[i]; 其實這個i大小沒辦法事先知道 輸入資料的筆數越多 : i也就必須越大才夠放 而且輸入的筆數是程式執行時才決定的 可是目前我都是寫死的 : 也就是都寫成 a *ptr[200]; 所以就都只先存200筆而已 : 不知有沒有方法讓i可以在程式執行時才動態的做增減 : 輸入100筆i就100 輸入500筆資料i就增加到500這樣 : -- : ※ 發信站: 批踢踢實業坊(ptt.cc) : ◆ From: 122.124.186.172 : → azureblaze:std::vector 05/29 22:04 : → azureblaze:http://ppt.cc/1ISF 用法可以參考這個 05/29 22:08 : → firejox:VLA? 05/29 22:19 : 推 chchwy:vector, 或者雙重指標 a** ptr ? 05/29 22:23 : → diabloevagto:一維用vector,二維用boost,或是自己用new 05/29 23:10 : 推 dSnAil:Linked List? 05/30 01:56 : → johnhmj:上面幾層樓的大大們都把答案給講出來了… ( ̄ー ̄;) 05/30 15:36 : → angleevil:如果是用c寫,link list是最佳解,再來是malloc和realloc 05/30 16:07 : → firejox:c99可以支持VLA呀XD 05/30 18:14 不好意思再請問一下 由於我的a類別並非建立實體的類別 所以指標都需要向下轉型 也就是b、c才是建立實體跟運作的類別 a是做管理用的抽象類別 class b : public a class c : public a { { }; }; 有可能 ptr[0]= new b(); ptr[1]= new c(); ptr[2]= new b(); ptr[3]= new c(); ptr[4]= new c(); [5] . . . . 等等 a *ptr[i] 所以我都需要藉助這個索引 [i] 來做第i筆資料的選取 請問那又該怎麼辦呢 因為我存資料、取資料、資料間做比對都是認這個索引值[i] -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 122.124.186.172

05/30 20:30, , 1F
聽起來 vector 可以達成你的需求
05/30 20:30, 1F

05/30 20:32, , 2F
請問vector裡面可以去new b()或new c()嗎
05/30 20:32, 2F

05/30 20:32, , 3F
因為今天試了一下都new不成功...
05/30 20:32, 3F
※ 編輯: ganlinliu 來自: 122.124.186.172 (05/30 20:35)

05/30 20:35, , 4F
05/30 20:35, 4F
請問接下來是這樣嗎 if( typeid( b) == typeid( ptr[i])) { b* pb= dynamic_cast<b*>( ptr[i]); if( pb) { 運作; } } ※ 編輯: ganlinliu 來自: 122.124.186.172 (05/30 22:20)

05/30 22:21, , 5F
我沒記錯的話b,c可能要虛擬繼承比較好.
05/30 22:21, 5F

05/30 22:23, , 6F
應該試if(b* pb= dynamic_cast<b*>( ptr[i]))
05/30 22:23, 6F

05/30 22:23, , 7F
{
05/30 22:23, 7F

05/30 22:23, , 8F
運作;
05/30 22:23, 8F

05/30 22:24, , 9F
}即可,可以看http://0rz.tw/BJx1a 裡面有
05/30 22:24, 9F

05/31 00:39, , 10F
如果你想用多型,為什麼一直轉型?
05/31 00:39, 10F

05/31 00:39, , 11F
你應該重新考慮你的架構.
05/31 00:39, 11F

05/31 02:24, , 12F
如果你要處理的介面在 a 找不到 ... 那你的設計根本
05/31 02:24, 12F

05/31 02:24, , 13F
是錯的 ...
05/31 02:24, 13F

05/31 10:24, , 14F
補充樓上,處理介面不一定要在a找到,它有可能是
05/31 10:24, 14F

05/31 10:25, , 15F
b 或 c自己的介面,但這樣的設計問題就在為什麼要
05/31 10:25, 15F

05/31 10:26, , 16F
放在同一個container內.
05/31 10:26, 16F

06/02 10:15, , 17F
會有這麼奇怪的code,我覺得你架構要重新整理一下
06/02 10:15, 17F
文章代碼(AID): #1DuuqLQn (C_and_CPP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #1DuuqLQn (C_and_CPP)