2016-09-04 2 views
0

구조체의 2D 벡터를 만들고 사용하려고합니다. 그러나 일은 작동하지 않습니다. 다음은 내가 사용하고있는 코드 조각입니다.2D 벡터를 초기화 할 수 없습니다.

struct Node 
{ 
int a,b; 
Node() : a(-1) , b(-1){}; 
};  
int m =5; n=4;  
vector<vector<Node>>T; 
    T.resize(m, vector<Node>(0)); 
    for (int i = 0; i < m; i++) 
     { 
      T[i].resize(n, Node()); 
     } 

실행 후 벡터 크기가 올바르게 초기화되지만 용량이 올바르지 않습니다. 특히 T는 크기 = 용량 = 5이지만 모든 T [i]의 크기는 4이고 용량은 1입니다. 그럼에도 요소 값이 올바르게 초기화 된 것으로 보입니다. See here 두 번째로 나중에 벡터를 수정하려고 할 때 그렇게 할 수 없습니다. 이 실행에

for (int i = 0; i < m; i++) 
     for (int j = 0; j < n; j++) 
     { 
     T[i][j].a= -1; 
     T[i][j].b= -1; 
     } 

, 제 소자 (T [0] [0])가 올바르게 갱신되어 있지만, 이후의 반복은 임의의 요소가 갱신되게된다. 내가 뭘 잘못하고 있는지 알 수 없습니다.

나는

vector<vector<Node>>T(m, vector<Node>(n)); 

로 초기화 시도하지만 여전히 값을 수정에서 동일한 문제에 직면 해있다.

+0

여기에 잘 작동하는 것),하지만 init을'벡터 > T (m, 벡터 (n, Node()))로 압축했다. –

+0

컴파일을 위해 VS 2015를 사용하고있다. gcc로 테스트했는데 제대로 작동하는 것 같습니다. 컴파일러 버그 일 가능성이 있습니까? – user3637767

+0

Visual Studio는 STL 템플릿의 친구가 아닙니다. :) 가능합니다. VS 전문가가 더 많은 것을 말하게 할 것입니다. (실제로 이것은 거대한 버그이기 때문입니다.) 어쩌면 당신은 일부 서비스 팩을 놓치고 있습니까? –

답변

0

난 당신의 코드와 "비주얼 스튜디오 2013 업데이트 5"다음 보여줍니다 복사 : Link

당신이 IDE에서 바로 버그를 가지고 걱정하지 마십시오

관련 문제