Utilizando la asignación de memoria dinámica -- ++ campo con arrays campo con sorting campo con dynamic-allocation camp Relacionados El problema

Using Dynamic Memory Allocation


0
vote

problema

Español

Así que me han dicho que cree una matriz que acepte 10 enteros del usuario, guárdelo en una matriz y ordena estos valores usando un ordenador de burbujas de puntero en orden ascendente.

Creo que he hecho mucho con éxito, pero estoy teniendo problemas con la segunda parte.

"Asigne dinámicamente otra matriz de 10 enteros. Copie los elementos de la primera a la segunda, pero en orden inverso (es decir, orden descendente). Muestre los elementos de la primera y la segunda matriz en orden y desasignación de la matriz asignada dinámicamente".

Soy capaz de mostrar la primera matriz en orden, y sé que para desasignar la matriz, debe usar la función Eliminar, pero no estoy tan seguro de cómo construir la matriz dinámica.

* No he incluido las funciones, ya que no creo que sean necesarias para esta parte, pero si lo hago, también lo publicaré también.

Gracias de antemano por cualquier sugerencia y aclaraciones.

  #include <iostream>  using namespace std;  void sortArray(int * , int); void showArray(const int * , int); int binarySearch(const int *, int, int);  int main(void) {     int const MAX_NUM = 10;     int numbers [MAX_NUM];     int counter;     int findval;     int index;     char again;      cout<< "Please enter 10 integer values."<< endl;     for(counter=0; counter< MAX_NUM ; counter++)     {         cout << "Enter a value for "<< counter+1 << ": ";         cin >> *(numbers+counter);     }       sortArray(numbers, 10);      cout << endl << "The values in ascending order are: " << endl;     showArray(numbers, 10);      do     {         cout<< endl <<  "Enter the value you are searching for: ";         cin >> findval;          cout << endl;         index = binarySearch(numbers , MAX_NUM , findval);         // Display the results of the search.         if (index == -1)             cout << "Number was not found." << endl << endl;         else             cout << "Number "<< findval<<" found in position " << index + 1 << endl << endl;         // Does the user want to do this again?         do         {             cout << "Would you like to look up another number? (y/n) ";             cin >> again;         }         while(again != 'y' && again != 'Y' && again != 'n' && again != 'N');     }      while (again == 'Y' || again == 'y');      cout<< endl << "Thank You. Press the return key to continue...";      cin.get();     cin.ignore();     return 0;    }    
Original en ingles

So I've been told to create an array that will accept 10 integers from the user, store it into an array, and sort these values using a pointer bubble sort in ascending order.

I believe I have successfully done this much, but I am having trouble with the second part.

"Dynamically Allocate another array of 10 integers. Copy elements from the first into the second, but in reverse order (i.e. descending order). Display the elements of the first and second array in order and deallocate the dynamically allocated array."

I am able to display the first array in order, and I know that to deallocate the array you must use the the delete function, but I am not so sure on how to construct the Dynamic Array.

*I have not included the functions since I don't believe they are necessary for this part, but if I do, then I'll post them as well.

Thanks in advance for any suggestions and clarifications.

#include <iostream>  using namespace std;  void sortArray(int * , int); void showArray(const int * , int); int binarySearch(const int *, int, int);  int main(void) {     int const MAX_NUM = 10;     int numbers [MAX_NUM];     int counter;     int findval;     int index;     char again;      cout<< "Please enter 10 integer values."<< endl;     for(counter=0; counter< MAX_NUM ; counter++)     {         cout << "Enter a value for "<< counter+1 << ": ";         cin >> *(numbers+counter);     }       sortArray(numbers, 10);      cout << endl << "The values in ascending order are: " << endl;     showArray(numbers, 10);      do     {         cout<< endl <<  "Enter the value you are searching for: ";         cin >> findval;          cout << endl;         index = binarySearch(numbers , MAX_NUM , findval);         // Display the results of the search.         if (index == -1)             cout << "Number was not found." << endl << endl;         else             cout << "Number "<< findval<<" found in position " << index + 1 << endl << endl;         // Does the user want to do this again?         do         {             cout << "Would you like to look up another number? (y/n) ";             cin >> again;         }         while(again != 'y' && again != 'Y' && again != 'n' && again != 'N');     }      while (again == 'Y' || again == 'y');      cout<< endl << "Thank You. Press the return key to continue...";      cin.get();     cin.ignore();     return 0;    } 
           
     
     

Lista de respuestas

0
 
vote
vote
La mejor respuesta
 

OPERADOR new debe usarse para asignar la memoria. Para uso de la oferta delete .

Inicio de la asignación de la memoria:

  terms0  

Luego, compruebe que se le asignó la memoria, como:

  terms111  

y utilice la función para copiar elementos, por ejemplo:

  terms2  

Finalmente, memoria Dymanic Free With Operator:

  terms3  

y no use terms4 después de eso.

 

Operator new should be used to allocate memory. For dealloaction use delete.

Start from allocation the memory:

    int * dynArr = NULL; // pointer to work with dynamic array     dynArr = new int[MAX_NUM]; // allocation of memory 

Then check that memory was allocated, like:

    if( dynArr != NULL )     {         // do something     }     else     {         // report about problem and do not use pointer     } 

And use function for copying elements, e.g.:

void reversCopy(const int * source, int * destination, int number) // Function for copying numbers from one array (memory) to other  // in the revers order (first element goes to the last position). // source - pointer to array where numbers will be read // destination - pointer to array where numbers will be written // number - number of elements to be copyed {      for(int i = 0; i < number; i++)     {         destination[i] = source[number - 1 - i];     } } 

Eventually, free dymanic memory with operator:

  delete[] dynArr;   dynArr = NULL; 

and do not use dynArr after that.

 
 
         
         
4
 
vote

La gestión de la memoria dinámica debe realizarse utilizando las clases y conceptos estándar de C ++ disponibles con Punteros inteligentes < / a> o contenedores .

Uso de idioma C ++ correctamente no requiere que use terms5 / terms6 Para la mayoría de los casos de uso que necesita para cubrir.

 

Dynamic memory management should be done using the C++ standard classes and concepts as available with either smart pointers or containers.

Using C++ language correctly doesn't require you to use new/delete for most of the use cases you actually need to cover.

 
 
     
     
0
 
vote

Para asignar dinámicamente la matriz, necesita construir un código como este:

  terms7  

La variable de tamaño no tiene que ser const y el compilador no necesita saber el valor de ello durante la compilación. Puede pedir al usuario que proporcione TAMAÑO :) No para revertir su tabla original, solo elementos de asesino de manera invertida:

  terms8  

Si desea realizar retroceder la tabla sin usar la nueva, debe visitar: contenidos inversos en Array . Hay pocos métodos para hacer esto :)

 

To dynamically allocate array you need to build code like this:

int *arr = new int[size];  // you have to remember to free memory when you won't need this array anymore - use delete[] achieve this 

size variable don't have to be const and compiler don't need to know value of it during compilation. You can ask user to provide size :) Not to reverse your original table just assassin elements in reversed way:

for (int i = 0; i < size; ++i) {     arr[i] = numbers[size - i - 1]; <-- '-1' to not read outside of orginal array (in C++ index starts with 0) } 

If you want to revers table without using new one you should visit: Reverse Contents in Array. There are few methods to do this :)

 
 

Relacionados problema

4  ¿Cómo asignar dinámicamente la matriz de objetos usando constructor parametrizado? [duplicar]  ( How to dynamically allocate array of objects using parameterized constructor ) 
Esta pregunta ya tiene respuestas aquí : C ++: asignar dinámicamente una matriz miembro de las estru...

12  Obtenga el tamaño (en bytes) de un objeto en el montón  ( Get the size in bytes of an object on the heap ) 
Soy consciente de que puede usar MemoryLayout<T>.size para obtener el tamaño de un tipo SELECT * FROM employees WHRERE 'emp_no = 1'; 0 . Por ejemplo: SE...

1  Asignación dinámica para un valor de puntero de mapa  ( Dynamically allocation for a map pointer value ) 
Di que tengo una clase que contiene un mapa con una llave de puntero: class Base; class App { private: size_t n; map<string, Base*> m; }; Lo ...

26  Encontrar el tamaño de la matriz asignada dinámicamente  ( Finding size of dynamically allocated array ) 
¿Por qué no es posible obtener la longitud de un búfer asignado de esta manera? AType * pArr = new AType[nVariable]; Cuando se desaloca la misma matriz...

1  Agregar dinámicamente objetos a la matriz  ( Dynamically add objects to array ) 
Tengo este código y funciona bien: News news_data[] = new News[] { new News("1","news 1","this is news 1"), new News("2","news 2","this is news 2"), new Ne...

0  Pasando una dimensión de una matriz dinámica 2D a una función  ( Passing one dimension of a 2d dynamic array to a function ) 
Tengo una matriz 2D que estoy asignando dinámicamente en el tiempo de ejecución, como SO ViewHolder5 y quiero pasar solo la segunda dimensión a mi funci...

0  Dividir una cadena en una matriz de cuerdas totalmente asignadas dinámicamente  ( Spliting a string into an array of strings completly dynamicly allocated ) 
Esta pregunta está muy cerca de esto a Este tema pero prefiero la lisibilidad y la aclaración de los punteros que necesitaba ofrecí esta solución. Así que...

0  Problemas con la asignación dinámica de una matriz de cadenas  ( Issues with dynamically allocating a string array ) 
Estoy tratando de asignar dinámicamente la matriz frags2 de TAMAÑO numberOfFrags y Copia sobre los contenidos de la matriz original a él. He probado numer...

1  Error C2512: No hay constructor predeterminado apropiado disponible (no clases)  ( Error c2512 no appropriate default constructor available not classes ) 
Estoy empezando con estructuras, y estoy teniendo problemas para asignar dinámicamente la matriz de estructura. Estoy haciendo lo que veo en mi libro y en Int...

1  Convertir muchas matrices estáticas con el mismo tamaño a la asignación dinámica en C  ( Convert many static arrays with same size to dynamic allocation in c ) 
Tenemos un programa en C con muchas matrices estáticas (cientos de cientos) definidas con el mismo tamaño como: int Array_1[ARRAY_SIZE]; my_struct_t Array_...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos