当2D数组矢量满时,如何初始化矢量数组?

时间:2013-10-11 10:57:48

标签: vector stl mfc

我制作了动态矢量类..

但问题显示主要功能在循环时打开,

当函数循环时,

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];

            }   

        }   

    }

// vector class

    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;  
    };

1 个答案:

答案 0 :(得分: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个元素。不管怎么说,我认为阵列是未初始化的,所以它都是垃圾。