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

배열을 초기화 할 때 중첩 된 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]; 
     } 
    } 
} 

당신은 반드시 배열 크기는 지정해야 할 것 . 귀하의 예제에서는 3,600 int DynamicArray를 초기화하기 위해 450 int 배열을 전달합니다. 실제로 불법적 인 데이터를 읽는 예제에서는 36 행의 16 번째 열로 이동하여 실제로 450 개의 int 배열에서 576 개의 요소를 읽습니다. 어쨌든 배열이 초기화되지 않았다고 가정하기 때문에 모든 쓰레기입니다.

+0

고맙습니다 .. 늦게 답장을해서 죄송합니다 .. – Sunmi

+0

네, 문제 없습니다. 질문에 대한 답변이 있으면 내 대답 옆에있는 체크 표시 아이콘을 클릭하여 대답을 수락해야합니다. 아직 물어 보지 못한 내용에 대해 알려면 알려주십시오. –