わかりましたので、Graph クラスを作成しています。アルゴリズムを実行して、この夏の後半に空き時間があるときに GUI を追加できるようにしたいと考えています。現在、ベクトルの配列 (頂点ごとに 1 つ) として実装されている adjList があります。各ベクトルは、関連付けられた各頂点から他の頂点に向かうエッジを表すポインターのリストです。次のように、Graph クラスの保護されたメンバーとして宣言されます。
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;
これですべてのメモリが解放されますか。また、これを確実に確認する簡単な方法はありますか。デバッグ中に new を使用して割り当てられたメモリ量をカウントするにはどうすればよいですか?
[編集: 詳細情報を追加して更新]
これは、擬似コードで指定された実装したいアルゴリズムの1つを示すGoogle Booksへのリンクです。このバージョンの幅優先検索は、隣接リスト (ポインターのリストの配列) で動作します。隣接リストを使用して各ノードに属性が割り当てられるため、ポインターを使用する必要があります。
実行後に各ノードに保存された BFS アルゴリズムからこれらの属性を保持したいと考えています。おそらくノードにインデックスを付け、並列配列を使用して属性を格納するなど、他の方法でこれを行うことができることを私は知っています。しかし、この疑似コード (リンクの BFS 用) と同様に機能するコードが必要でした。