作者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