2016-11-09 5 views
0

여기 내 2 차원 정수 벡터입니다.C++에서 정수 벡터를 2 차원 정수 벡터에 푸시 할 수없는 이유는 무엇입니까?

for 루프를 사용하여이 벡터에서 push_back 값을 사용하려고합니다. r 및 c는이 함수에 정수를 전달합니다. 당신의 제로 포함됩니다 각 서브 벡터의

vector<vector<int>> nodes (r*c); 

그렇지 않으면 처음 5 개 요소를 벡터를 선언해야이 전에

for(i = 0; i < r*c; i++) 

{   
     nodes[i].push_back({i/c, i%c, -1, -1, 0}); 

} 

답변

0

nodes[i] 사용할 수있는 것은 정수의 벡터이다. 벡터을 정수 벡터에 추가하려고합니다.

중 하나를 수행합니다

nodes.push_back({i/c, i%c, -1, -1, 0}); 

또는

nodes[i] = {i/c, i%c, -1, -1, 0}; 

이미 벡터에 대해 적절한 차원을 준 이후 최고의되는 두 번째 솔루션

. 항목

std::vector<std::vector<int>> nodes; 
for(i = 0; i < r*c; i++) 
{   
    nodes.push_back({i/c, i%c, -1, -1, 0}); 
} 

또는 적절한 크기로 만들고 할당합니다 :

std::vector<std::vector<int>> nodes (r*c, std::vector<int> (5)); 
for(i = 0; i < r*c; i++) 
{   
    nodes[i] = {i/c, i%c, -1, -1, 0}; 
} 
+0

진, 감사합니다. 그게 문제를 해결했습니다! – Ishrat

0

사용 방법 insert 대신 push_back

nodes[i].insert(nodes[I].end(), {i/c, i%c, -1, -1, 0}); 

하지만.

또한이 방법 assign

nodes[i].assign( {i/c, i%c, -1, -1, 0}); 
+0

의 코드에서 r*c 이상의 요소 ...

를 추가하거나 빈 만들고 채우는 push_back으로 할 필요가 없습니다 문제는 아닙니다. 'nodes [i]'는 _integers_의 벡터입니다. 벡터 안에는 벡터를 삽입 할 수 없습니다. 그것이'push_back'가 실패한 이유입니다 (그리고'insert' 컴파일은하지만 그것이 무엇을하는지 신이 알고 있습니다.) Segfault here) –

+0

@ Jean-FrançoisFabre Нщг 틀렸어. 그것은 삽입 된 벡터가 아닙니다. 이것은 삽입되는 초기화리스트의 값입니다. –

+0

나는 아직도 의심 스럽지만, 노드들 (node ​​[i] .end(), {i/c, i % c, -1, -1, 0});'컴파일되지 않습니다 ('I'는 선언되지 않음). 또한 nodes.insert (nodes.end(), {i/c, i % c, -1, -1, 0}); –