2013-10-11 2 views
1

я сделал динамический вектор класс ..Как можно инициализировать векторный массив, когда вектор 2D-массива заполнен?

Но проблема показать, когда основная функция цикла и на,

размер строки 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

Вложенные петли должны быть в порядке при инициализации вашего массива, но вам нужно будет поместить значения в массив 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 для инициализации 3600 int DynamicArray. В примере вы на самом деле читаете незаконные данные, потому что вы переходите в 16-й столбец каждой из 36 строк, поэтому вы фактически читаете 576 элементов из массива 450 int. Я предполагаю, что массив все равно неинициализирован, так что все это мусор.

+0

Спасибо .. Извините, что опоздал ответить .. – Sunmi

+0

Да, без проблем. Если это ответ на ваш вопрос, вы должны принять ответ, щелкнув значок галочки рядом с моим ответом. Если я до сих пор не ответил, что вы пытались спросить, дайте мне знать, и я попытаюсь прояснить. –

Смежные вопросы