1

我做了动态矢量类..

但是问题显示当 main 函数不断循环时,

当函数循环时,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;  
    };
4

1 回答 1

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 个元素。我想无论如何数组都没有初始化,所以这都是垃圾。

于 2013-10-15T12:37:01.670 回答