2013-10-11 94 views
1

我做了動態矢量類..二維數組向量滿時如何初始化向量數組?

但問題節目時,主要功能是循環上和,

當函數循環

當數據上的循環來my2dArr的行規模在不斷擴大,我想複製新的數據..

void main() 
    { 

     int data[450]; 

    DynamicArray<int> my2dArr(36, 100); 
    for(int i = 0;i < 36;++i) 
     { 
      for(int j = 1;j < 16;++j) 
      { 


       my2dArr[i][j-1] = data[i]; 

      } 

     } 

    } 

//矢量類

class DynamicArray 
    { 
    public: 
     DynamicArray(){}; 

     DynamicArray(int rows, int cols): dArray(rows, vector<T>(cols)){} 

     vector<T> & operator[](int i) 
     { 
      return dArray[i]; 
     } 
     const vector<T> & operator[] (int i) const 
     { 
      return dArray[i]; 
     } 
     void resize(int rows, int cols)//resize the two dimentional array . 
     { 
      dArray.resize(rows); 
      for(int i = 0;i < rows;++i) dArray[i].resize(cols); 
     } 

    void clearCOL() 
    { 
     for(int i = 0;i < dArray.size();i++) 
    { 
      for(int j = 0;j < dArray[i].size();++j) 
      { 

      dArray[j].erase(); 
      } 
    } 

     } 
    private: 
     vector<vector<T> > dArray; 
    }; 
+0

請更具體。你得到的實際錯誤是什麼?還請修復您的代碼縮進,使其更具可讀性。 – legends2k

回答

0

嵌套的for循環在初始化數組時應該沒問題,但是您需要將值放入data數組中以便在初始化時使用它。

如果你只對數據進行初始化,一旦你可能會考慮第三個構造函數重載需要在int[],像這樣:

DynamicArray(int rows, int cols, T array[]): dArray(rows, vector<T>(cols)) 
{ 
    for(int i = 0; i < rows; i++) 
    { 

     for(int j = 0; j < cols; j++) 
     { 
      dArray[i][j] = array[i * rows + j]; 
     } 
    } 
} 

你需要確保在你指定的數組大小。在你的例子中,你傳入一個450 int數組來初始化一個3,600 int DynamicArray。在你的例子中,你實際上正在讀取非法數據,因爲你到了36行中的每一行的第16列,所以你實際上是從450 int數組中讀取576個元素。無論如何,我想這個數組還是未初始化的,所以這都是垃圾。

+0

謝謝..對不起,延遲迴復.. – Sunmi

+0

是啊,沒問題。 如果回答您的問題,您應該點擊答案旁邊的複選標記圖標接受答案。 如果我仍然沒有回答你想問的問題,請告訴我,我會盡力澄清。 –