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

1 に答える 1

0

ネストされた for ループは、配列の初期化では問題ないはずですが、初期化で使用するには配列に値を入れる必要がありdataます。

データを一度だけ初期化する場合は、次のint[]ように、 を受け取る 3 番目のコンストラクターのオーバーロードを検討できます。

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 に答える