Una array dinámica es una array que puede crecer, cambiar su tamaño, contiene una tabla dinámica, que es mutable por naturaleza, o una lista de arrays es accesible aleatoriamente, la estructura de datos de la lista de tamaño variable que permite agregar o eliminar elementos.
Supongamos que queremos crear una clase para Graph. La clase almacena la representación de la array de adyacencia del gráfico.
Ejemplo:
CPP
// C++ program to demonstrate class of graphs class Graph { int V; int adj[V][V]; // This line doesn't work /* Rest of the members */ }; int main() { }
Salida :
error: invalid use of non-static data member 'Graph::V'.
Incluso si hacemos que V sea estático, obtenemos el error «el límite de la array no es una constante entera».
C++ no permite la creación de una array asignada por pila en una clase cuyo tamaño no es constante. Entonces necesitamos asignar memoria dinámicamente. A continuación se muestra un programa simple que muestra cómo asignar dinámicamente una array 2D en una clase de C++ usando una clase para Graph con representación de array de adyacencia.
C++
// C++ program to demonstrate // how to allocate dynamic 2D // array in a class using a Graph #include <bits/stdc++.h> using namespace std; // A Class to represent directed graph class Graph { int V; // No. of vertices // adj[u][v] would be true if there is an edge // from u to v, else false bool** adj; public: Graph(int V); // Constructor // function to add an edge to graph void addEdge(int u, int v) { adj[u][v] = true; } void print(); }; Graph::Graph(int V) { this->V = V; // Create a dynamic array of pointers adj = new bool*[V]; // Create a row for every pointer for (int i = 0; i < V; i++) { // Note : Rows may not be contiguous adj[i] = new bool[V]; // Initialize all entries as false to indicate // that there are no edges initially memset(adj[i], false, V * sizeof(bool)); } } // Utility method to print adjacency matrix void Graph::print() { for (int u = 0; u < V; u++) { for (int v = 0; v < V; v++) cout << adj[u][v] << " "; cout << endl; } } // Driver method int main() { // Create a graph given in the above diagram Graph g(4); g.addEdge(0, 1); g.addEdge(0, 2); g.addEdge(1, 2); g.addEdge(2, 0); g.addEdge(2, 3); g.addEdge(3, 3); g.print(); return 0; }
Salida :
0 1 1 0 0 0 1 0 1 0 0 1 0 0 0 1
Nota: memset() se usa por separado para filas individuales. No podemos reemplazar estas llamadas con una llamada porque las filas se asignan en diferentes direcciones y hacer una llamada de memset sería desastroso.
Ejemplo:
// Wrong!! (Rows of matrix at different addresses) memset(adj, false, V*V*sizeof(bool));
Este artículo es una contribución de Dheeraj Gupta . Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA