그래, Graph 클래스를 만들려고하는데 알고리즘을 실행할 수 있기를 바래서 나중에 자유 시간이있을 때 나중에이 여름에 GUI를 추가 할 수 있기를 바랍니다. 지금은 벡터의 배열 (각 꼭지점마다 하나씩)로 구현되는 adjList가 있습니다. 각 벡터는 연결된 각 꼭지점에서 다른 꼭지점으로가는 가장자리를 나타내는 포인터 목록입니다. 다음과 같이 내 그래프 클래스의 보호 된 멤버로 선언됩니다.C++에서 할당 해제 (포인터의 벡터 배열)
std::vector <Node*> *adjList;
adjList = new std::vector<Node*>[V];
나는 측면 질문이 있습니다. 이제 여기에 포인터를 보유하는 벡터 배열 (포인터를 통해)이 있습니다. 대신이 배열이 아니라 노드 포인터의 단 하나의 벡터에 대한 포인터 아니었다면 그때과 같이 생성자를 호출 할 수 있습니다이 나를 동적 배열의 기본 크기를 지정할 수 있도록 할
adjList = new std::vector<Node*>(10);
벡터,하지만 적어도 생성자를 호출 할 수없는 것 같아요, 또는 적어도 배열을 가질 때 구문을 올바르게 가져올 수 없습니다.
지금 내 관심사입니다. 내 포인터 배열에있는 각 벡터에 대해 addVertex 메서드에서 new 연산자를 호출하여 각 벡터에 노드 포인터를 추가합니다. 이제는이 모든 것을 올바르게 할당 해제 처리해야합니다. 나는 이것이 C++에서 어떻게 작동해야하는지에 대한 이해를 가지고 있다고 믿지만, 포인터가 까다 롭다는 것을 알고 있으므로 누군가이 코드 기반을 많이 추가하기 전에 살펴 보길 원했다. 내가 가지고있는 것과 매우 흡사 한 몇 가지 검색으로는 아무 것도 찾을 수 없었습니다. 여기 내 할당 해제 위치 :
for(int i =0; i < V; i++)
for (unsigned int j = 0; j < adjList[i].size(); j++)
delete adjList[i][j];
delete adjList;
메모리가 모두 비게됩니까? 또한 확실하게 확인할 수있는 쉬운 방법이 있습니다. 내가 디버깅하는 동안 새 메모리를 사용하여 할당 된 메모리 양을 유지하려면?
[편집 : 추가 정보를 원하시면/w 업데이트 여기
내가 psuedocode에 주어진 구현하려면 걸려 알고리즘 중 하나를 보여주는 구글 도서에 link입니다. 폭 확대 우선 검색의이 버전은 인접성 목록 (포인터 목록 배열)에서 작동합니다. 인접성 목록을 사용하여 각 노드에 지정된 속성 때문에 포인터를 사용해야합니다.
각 노드가 실행 된 후에 저장된 내 BFS 알고리즘에서이 속성을 유지하려고합니다. 다른 방법으로이를 수행 할 수 있다는 것을 알고 있습니다. 아마도 노드를 인덱싱하고 병렬 배열을 사용하여 특성을 저장할 수 있습니다. 그러나이 psuedo-code (링크의 BFS 용)와 비슷한 코드를 원했습니다.
왜 벡터 배열을 사용하고 있습니까? 왜 이미 벡터를 사용하고 있다면 왜 벡터 벡터를 사용하지 않습니까? – chris
나는 이것을 보이는 벡터 벡터로 바꿀 예정이지만, 벡터 배열을 사용해야 할 경우 생성자를 어떻게 호출할지 궁금하다. 기본 생성자 만 호출 할 수 있습니다. –