Estoy tratando de hacer una copia en profundidad de un puntero a un array de enteros, y estoy teniendo problemas para decidir qué código es innecesariamente detallado y lo que se necesita.

El puntero estoy tratando de copiar es una simple matriz de enteros.

int* vertexArray = new int[G->size()];

Contiene los números de 0 a size()-1 como sus valores. Mi primera aunque era hacer una nueva int* donde la igualdad hasta el vértice de la matriz,

int* shortestTour = vertexArray

pero creo que va a hacer el shortestTour cambian cada vez que permutar las vertexArray. Es la única manera de hacer una copia en profundidad de este con un bucle como este

for(int i=0; i<G->size(); i++){
    shortestTour[i] = vertexArray[i];
}

y, a continuación, ejecutar el bucle cada vez que encuentro un tour/ruta de acceso más corta que la actual más corto?

EDIT: Esto es por una simple, la fuerza bruta de aplicación del problema del viajante.

  • Por qué no simplemente usar std::vector en su lugar?
  • Usted puede también utilizar std::copy() para hacer esto. Es realmente claro lo que usted está preguntando acerca de.
  • ¿necesita una copia profunda? O compartir los datos es suficiente?
InformationsquelleAutor Xerunix | 2015-05-10

1 Comentario

  1. 6

    Como usted puede haber adivinado, una copia en profundidad no es copiar el puntero (después de todo, un puntero es sólo una dirección que apunta a algún lugar de la memoria), pero la copia de la memoria que está siendo apuntado por el puntero.

    Por lo tanto, si usted tiene

    int* vertexArray = new int[G->size()];

    una copia profunda es

    int* deepCopy = new int[G->size()];
    for(size_t i = 0; i < G->size(); ++i)
        deepCopy[i] = vertexArray[i]; //copy the allocated memory 

    Por supuesto, hay más inteligente y más rápida manera de copiar la memoria, como

    std::memcpy(deepCopy, vertexArray, sizeof(int)*G->size()); //should be faster

    Una copia superficial es sólo copiar el puntero, no el de la memoria,

    int* shallowCopy = vertexArray;

    Las modificaciones que vamos a hacer va a ser reflejada por tanto shallowCopy y vertexArray punteros, ya que ambos apuntan a la misma trozos de memoria.

    Usted debe pensar si necesita una copia profunda o no. Si desea compartir los datos, probablemente no. Si los datos deben ser «local», entonces probablemente usted lo hace.

Dejar respuesta

Please enter your comment!
Please enter your name here