2013-06-06 3 views
0

저는 최근에 벡터를 사용하여 왔으며 일반 배열 선언과 비교할 때 매우 편리하다는 것을 알았습니다. 그러나, 나는 다음과 같은 경우에만 1D 작업을 처리했다 : - 벡터를 사용하는 2D 배열 작업

 vector<int>X; 
     X.push_back(value/variable); 

어떻게 행에 의해 행을 2 차원 벡터에 해당 비슷한 작업을 수행하고 동적으로 값을 업데이트합니까? 그 질문이 초보적인 것이라면 여기와 사과를 도와주세요. 또한 벡터의 모든 작업이 자습서로 제공되는 링크를 보여줄 수 있다면 정말 도움이 될 것입니다. 나는 몇 개의 사이트를 시도했지만, 그들은 온통 조금씩 다닙니다. 도와주세요.

답변

3

또 하나의 방법입니다 가 아니면, 그냥 여기

(http://www.boost.org/doc/libs/1_53_0/libs/multi_array/doc/user.html)

은 예입니다 부스트 :: multi_array를 사용 수업. 여기

예 : 답장을 보내

#include <iostream> 
#include <vector> 

class array_2d 
{ 
    public: 
     array_2d( 
      unsigned int x, 
      unsigned int y) 
     : 
      m_size_x(x), 
      m_size_y(y), 
      // resize vector to size x*y, all elements are 0. 
      m_data(x*y, 0) 
     {} 

     int 
     get(unsigned int x, unsigned int y) const 
     { 
      return m_data[ x + y * m_size_y ]; 
     } 

     void 
     set(unsigned int x, unsigned int y, int data) 
     { 
      m_data[ x + y * m_size_y ] = data; 
     } 

    private: 
     unsigned int m_size_x; 
     unsigned int m_size_y; 

     std::vector <int> m_data; 
}; 

int main() 
{ 
    // 2D array 2x3. 
    array_2d m(2, 3); 

    // Set 2 cells into 1 and 3. 
    m.set(1, 1, 1); 
    m.set(2, 0, 3); 

    for(unsigned int i = 0; i < 3; ++i) 
    { 
     for(unsigned int j = 0; j < 2; ++j) 
      std::cout << m.get(i, j) << " "; 

     std::cout << std::endl; 
    } 
    return 0; 
} 
+1

개인적으로 더 효율적이므로 내 벡터 솔루션보다 개인적으로 더 좋아합니다. 하지만 여기서는 좀 더 코드를 작성해야 할 것입니다. 여기에서 수행 된 좌표 변환에 operator() 또는 []를 추가하면 array2d (1,3) = 7과 같은 작업을 수행하여 요소를 액세스/수정할 수 있습니다. if (array2d (1,3)> 5) 여전히 +1입니다. – AlexK

1

vector <vector <int> > 줄을 따라 무언가가 필요합니다. 내부 벡터는 전체 행을 나타냅니다. 또는 전체 열 (행 주요 열 또는 주요 열만 선택하고 막대기). 자신의 차원이-주소와 함께 하나 개의 벡터의 사용을 2 차원 배열로 작업하는

//#include <iostream> 
#include <stdio.h> 
#include <vector> 
using namespace std; 

int main(){ 

vector <vector <int> > my2d; 

vector<int> row; 

row.push_back(1); row.push_back(2); row.push_back(3); 

my2d.push_back(row); 

++row[1]; 

my2d.push_back(row); 

--row[0]; 

my2d.push_back(row); 

for(size_t r=0;r<my2d.size();r++) 
{ 
    for(size_t c=0;c<my2d[0].size();c++) 
    { 
     printf("%d ",my2d[r][c]); 
    } 
    printf("\n"); 
} 

getchar(); 

return 0; 
} 
+0

감사합니다. 나는 약간 익숙해 져 있기 때문에 지금은 벡터를 사용하는 것을 선호한다. 여기서 push_back을 사용하여 열 또는 행을 따라 요소를 하나씩 업데이트 할 수있는 방법을 알려주시겠습니까? 구문 현명한 것 같이? (0,1)과 같고 (0,2) 등이됩니다. 미리 감사드립니다. –

+0

3 개의 열 및 원하는 경우. 행 수, 어떻게해야합니까? –

+1

예제를 추가했습니다. 3 행 3 열 있습니다. 먼저 (1 2 3) 행을 추가 한 다음 (1 3 3)을 더한 다음 (0 3 3)을 더한 다음에 전체를 인쇄하십시오. – AlexK

관련 문제