クラスで空のベクターフィールドを初期化しないでください。ベクターのデフォルトコンストラクターで十分です。ただし、要素の数がすでにわかっている場合は、コンストラクターでサイズを変更できます。
Graph(int NumberOfVertices):vertices(NumberOfVertices),
edges(0) { adjacency_list.resize(vertices)};
これは間違いなく間違っています:
adjacency_list(NULL) // this will evaluate to vector(0)
// and your vector has 0 size
おそらく、ベクトルが格納するポインターをベクトル自体と混同した可能性があります。NULL でクラス ベクトルを初期化すると、サイズが 0 のベクトルに評価されます。クラスメンバーである空のインスタンスを初期化する必要はありませんvector
:
デフォルトの初期化は、次の 3 つの状況で実行されます。
1) 自動保存期間を持つ変数が初期化子なしで宣言されている場合
2) 動的保存期間を持つオブジェクトが、初期化子なしの new 式によって作成された場合
3) 基本クラスまたは非静的データ メンバーがコンストラクター初期化子リストに記載されておらず、そのコンストラクターが呼び出された場合。<<< あはは
デフォルトの初期化の影響は次のとおりです。
T がクラス型の場合、既定のコンストラクターが呼び出されて、新しいオブジェクトの初期値が提供されます。
T が配列型の場合、配列のすべての要素はデフォルトで初期化されます。それ以外の場合は、何も行われません。
T が const 修飾された型である場合、ユーザー提供の既定のコンストラクターを持つクラス型である必要があります。