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));
로 초기화 시도하지만 여전히 값을 수정에서 동일한 문제에 직면 해있다.
여기에 잘 작동하는 것),하지만 init을'벡터> T (m, 벡터 (n, Node()))로 압축했다. –
컴파일을 위해 VS 2015를 사용하고있다. gcc로 테스트했는데 제대로 작동하는 것 같습니다. 컴파일러 버그 일 가능성이 있습니까? – user3637767
Visual Studio는 STL 템플릿의 친구가 아닙니다. :) 가능합니다. VS 전문가가 더 많은 것을 말하게 할 것입니다. (실제로 이것은 거대한 버그이기 때문입니다.) 어쩌면 당신은 일부 서비스 팩을 놓치고 있습니까? –