Così fa questo (vector<int> adj[N];
) crea una matrice di tipo vettoriale o questo crea un vettore di array?
Crea serie di vettori
Qual è la differenza tra
vector< vector<int> > N;
e
vector<int> F[N]
Nel primo caso si sta creando una matrice dinamica di array dinamici (vettore di vettori). La dimensione di ogni vettore potrebbe essere modificata durante l'esecuzione e tutti gli oggetti verranno allocati nell'heap.
Nel secondo caso si sta creando un array di vettori di dimensioni fisse. È necessario definire N
in fase di compilazione e tutti i vettori verranno posizionati nello stack †, tuttavia, ciascun vettore allocherà elementi nell'heap.
Preferisco sempre il vettore del caso vettori (o della matrice, se è possibile utilizzare librerie di terze parti) o std::array
di std::array
s in caso di dimensioni in fase di compilazione.
Sono nuovo a C++ STL e non riesco a comprendere la rappresentazione del grafico .
Si può anche rappresentare grafico come un std::unordered_map<vertex_type,std::unordered_set<vertex_type>>
, dove vertex_type
è il tipo di vertice (int
nel tuo caso). Questo approccio potrebbe essere utilizzato per ridurre l'utilizzo della memoria quando il numero di spigoli non è enorme.
†: Per essere precisi - non sempre sulla pila - può essere una parte di un oggetto complesso sul mucchio. Inoltre, lo standard C++ non definisce alcun requisito per lo stack o l'heap, fornisce solo i requisiti per la durata dello storage, come automatico, statico, thread o dinamico.
provare a leggere da destra *** a sinistra***. In questo caso diventa una matrice di vettori. –
'int x [N];' è una matrice di 'int'; 'vector y [N];' è una matrice di 'vector '. –
Ricordate, per ogni array definito come 'T nome [N]', avete una matrice, 'nome', con elementi' N' di tipo 'T'. Inoltre, mentre siamo in tema di matrici, 'std :: array' è un contenitore per una matrice sotto forma di 'T nome [N]', proprio come 'std :: vector ' è un contenitore per una matrice di lunghezza variabile di tipo 'T'. –