2013-10-11 56 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

是啊,没问题。 如果回答您的问题,您应该点击答案旁边的复选标记图标接受答案。 如果我仍然没有回答你想问的问题,请告诉我,我会尽力澄清。 –