- 最後登錄
- 2024-11-18
- 在線時間
- 1073 小時
- 註冊時間
- 2009-3-23
- 閱讀權限
- 20
- 精華
- 0
- UID
- 6067317
- 帖子
- 9
- 積分
- 31 點
- 潛水值
- 20870 米
| 本帖最後由 kiwis 於 2016-11-28 04:42 PM 編輯
我猜你是想要”只 new 一次,也只 delete 一次,但是想用二維陣列的方式操作”吧?
如果是的話,也不是不行這樣做,只是有點複雜。
重點是要實作一個一維陣列的template。- template<class T>
- class T2DArray
- {
- public:
- T2DArray(int new_x, int new_y):
- p_array(0),
- x(new_x),
- y(new_y)
- {
- p_array = new T[ x*y ];
- };
- ~T2DArray()
- {
- if(p_array)
- delete [] p_array;
- };
- class TArray
- {
- public:
- TArray(T* array, int new_length):
- length(new_length),
- p_array(array)
- {
- }
- T& operator[](int index)
- {
- if(index >= length || 0 > index)
- throw std::invalid_argument( "invalid index.\n" );
- else
- return (p_array[index]);
- };
- private:
- T* p_array;
- int length;
- };
- TArray operator[](int index)
- {
- if(index >= x || 0 > index)
- throw std::invalid_argument( "invalid index.\n" );
- else
- return TArray(p_array+(y * index) ,y);
- };
- private:
- T2DArray(const T2DArray&); // copy constructor
- T2DArray& operator=(const T2DArray&); // assign operator
- T* p_array;
- int x;
- int y;
- };
複製代碼 T2DArray[ index ] 會傳回一個 TArray,
TArray[ index ] 會傳回記憶體上真正的數字,
不過是一個感覺上危險到不行的東西,
隨時會來個 Array Out Of Bound 的例外...
個人並不推薦這種用法。... |
|