作者ric2k1 (Ric)
看板EE_DSnP
標題Re: [問題] class裡的array以及vector
時間Fri Jan 16 02:11:25 2009
※ 引述《BloodyDuke (個巴樂)》之銘言:
: 我在寫project遇到了以下的問題,
: 雖然用一些我覺得很不好的方式解決了,
: 但還是蠻curious
: 問題一.
: class裡的矩陣不知怎麼初始化。
: 例如 class A 裡有個anotherClass* arr [int],
: 在constructor A()裡我不知如何初始化上述矩陣,
: 我試過
: A():anotherClass* arr [int](0),...other data member{}
Initializer list 不可把 type 寫上去哦!
不過即使寫 arr[10](0) 也是不對的... 請參見一般 array initialize 的方式
: 但沒用
: 所以我最後是乾脆不初始化array
: 即
: A():other data member{}
: 這樣array裡的值應該也會自動初始為零巴?
理論上是, 但是為了保險起見, 還是建議你:
A(): other data members { for (unsigned i = 0; i < arrSize; ++i) arr[i] = 0; }
: 問題二.
: 承接上個問題,在anotherClass* arr [int]裡
: 那個int必須在程式執行中決定
原來你的 int 真的是寫 "int"? 這樣不會過吧? 我還以為你的 int 是指一個 constant
: 可是這樣我就無法在class A裡寫
: private:
: anotherClass* arr [int];
解決辦法之ㄧ就是用 double pointer:
anotherClass **_arr;
unsigned _arrSize;
in constructor:
A(unsigned s): _arrSize(s) {
_arr = new anotherClass *[s];
for (unsigned i = 0; i < s; ++i) _arr[i] = 0;
}
: 我想過用static data member
: 但compiler仍是說
: "data member may not have variably modified type"
: 後來我查了一下,
: 發現有vector這種動態矩陣可以在執行過程中決定array大小
: 但當我改成
: private:
: vector<anotherClass*> arr;
: compiler卻說
: "ISO C++ forbids declaration of `vector' with no type"
: 似乎自定義的型態vector不接受
: 恩,因此我最後只好把那個int直接assign一個安全的值給他
: 但這樣真的感覺很弱
: 希望各位強者給點建議
要 #include <vector> 而且要 using namespace std; (或 using std::vector; )
用 vector 是一個比較好的選擇, 但請花一點時間了解一下他的用法.
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.224.43.212
1F:推 BloodyDuke:感謝,原來如此... 01/16 07:55