2013-07-15 2 views
44

초기화, 나는 다음과 같습니다 ...되어이차원 표준 : 그래서 벡터

for(int i=0; i<A_NUMBER; i++) 
    { 
      std::vector <int> fogRow; 
      for(int j=0; j<OTHER_NUMBER; j++) 
      { 
       fogRow.push_back(0); 
      } 
      fog.push_back(fogRow); 
    } 

그리고 그것은 매우 잘못된 느낌 :

std::vector< std::vector <int> > fog; 

내가 그것을 초기화하고 매우 순진 좋아 이런 식으로 벡터를 초기화하는 또 다른 방법은 없을까요?

+1

'std :: vector :: max_size()'보다 더 많은 공간이 필요하지 않으면 2d 벡터에 1 차원 벡터 구현을 권장합니다. [Here] (http://stackoverflow.com/a/13937325/942596) – andre

답변

93

초기 크기와 기본값 허용하는 std::vector::vector(count, value) 생성자 사용

std::vector<std::vector<int> > fog(
    A_NUMBER, 
    std::vector<int>(OTHER_NUMBER, 4)); 
: 값이 다른 제로는, 예를 들어 4을 말한다면

std::vector<std::vector<int> > fog(
    A_NUMBER, 
    std::vector<int>(OTHER_NUMBER)); // Defaults to zero initial value 

을, 디폴트로 요구되었다

나는 균일 한 초기화가 vector 및 다른 컨테이너의 초기화를 허용하는 C++ 11에서 소개되었다는 것을 언급해야한다. {} :

std::vector<std::vector<int> > fog { { 1, 1, 1 }, 
            { 2, 2, 2 } }; 
23

std::vector에는 append 방법이 없다,하지만 당신은 intA_NUMBER 벡터를 포함하는 벡터를 확인하려면 other_number 0을 포함하는 각, 당신은이 작업을 수행 할 수 있습니다

std::vector<std::vector<int>> fog(A_NUMBER, std::vector<int>(OTHER_NUMBER)); 
+0

에 대한 추가 : 그냥 오타 :) 감사합니다! – fritzone

+0

그것은 우리를 위해 일하고, – mxi1

0

일반에게 문법은 이미 묘사 된 바와 같이 :

std::vector<std::vector<int> > v (A_NUMBER, std::vector <int> (OTHER_NUMBER, DEFAULT_VALUE)) 

여기서, 벡터 'v'는 2 차원 배열로서 시각화 될 수있다. 'A_NUMBER'행의 'OTHER_NUMBER'열로 초기 값이 'DEFAULT_VALUE'로 설정됩니다.

는 또한 그것과 같이 쓸 수있다 :

for(int i = 0; i < A_NUMBER; i++) { 
    for(int j = 0; j < OTHER_NUMBER; j++) { 
     std::cin >> v[i][j] 
    } 
} 

로서는 이미되었습니다

std::vector <int> line(OTHER_NUMBER, DEFAULT_VALUE) 
std::vector<std::vector<int> > v(A_NUMBER, line) 

입력하기 값을 2 차원 벡터로하는 2 차원 배열에 값을 입력 비슷 다른 대답 ....에 명시된!