Obtenga un bloque de memoria temporal. En la biblioteca STL de C++, hay una función get_temporary_buffer que se usa principalmente para obtener un bloque temporal.
- Esta función toma un tamaño n y devuelve el búfer más grande disponible hasta el tamaño n que puede caber en la memoria física.
- Esta función se usa para obtener una memoria de naturaleza temporal que se usa principalmente para la operación de un algoritmo, ya que algunos algoritmos requieren espacio adicional para funcionar correctamente.
- Una vez que el bloque de memoria asignado ya no sea necesario, se liberará llamando a return_temporary_buffer.
Sintaxis:
pair(int*, ptrdiff_t) p = get_temporary_buffer(int)(required size)
Parámetros:
- n: Número de elementos de tipo T para los que se asigna memoria temporal.
- ptrdiff_t: es de tipo integral.
Retorno: La función devuelve el primer y segundo par de objetos. Cuando se asigna memoria, la primera contiene el puntero al primer elemento del bloque y la segunda contiene el tamaño. Si el bloque de memoria no está asignado, el primer par contiene un puntero nulo y el segundo contiene cero.
Ejemplo 1:
Para contar el total de números pares en una array e imprimir la array ordenada usando get_temporary_buffer
Input : 8, 9, 2, 1, 10, 14, 37, 18, 17, 5 Output : It contain 10 elements Sorted array is 1, 2, 5, 8, 9, 10, 14, 17, 18, 37 Explanation: Step 1: initialize the array b[] first, we find the even number elements in an array using for loop[0-n-1] if(a[i]%2==0){ c++;} print the count of even number. Step 2: use get_temporary buffer to allocate the block of memory pair(int*, ptrdiff_t) p=get_temporary_buffer(int)(required size) here required size is 10 Step 3: now copy the elements in the temporary buffer uninitialized_copy(b, b+p.second, p.first); now using for loop [0 to p.second-1] sort the array using sort function sort(p.first, p.first+p.second) and finally print the sorted array.
C++
// C++ code to demonstrate the get_temporary_buffer // to sort an array #include <iostream> #include <algorithm> #include <memory> using namespace std; void sorting(int b[], int n) { int i, c = 0; for (i = 0; i < n; i++) { if (b[i] % 2 == 0) { c++; } } cout << "The total even numbers are: " << c << endl; cout << "original array :" << " "; cout << "\n"; for (i = 0; i < 10; i++) { cout << b[i] << " "; } cout << "\n"; pair<int*, ptrdiff_t> p = get_temporary_buffer<int>(10); // copy the contents in temporary buffer with pair uninitialized_copy(b, b + p.second, p.first); sort(p.first, p.first + p.second); cout << "sorted array :" << endl; for (i = 0; i < p.second; i++) { cout << p.first[i] << " "; } } // driver program to test above function int main() { int b[] = { 8, 9, 2, 1, 10, 14, 37, 18, 17, 5 }; int n = sizeof(b) / sizeof(b[0]); sorting(b, n); return 0; }
Producción:
The total even numbers are: 5 original array : 8 9 2 1 10 14 37 18 17 5 sorted array : 1 2 5 8 9 10 14 17 18 37
Ejemplo 2:
Ordenar la string alfabéticamente usando get_temporary_buffer y return_temporary_buffer
Input : 'b', 'g', 'y', 'v', 'p' Output : b g p v y This will print the contents in an increasing order of alphabets.
C++
// C++ code to sort the characters // alphabetically using std::get_temporary_buffer #include <iostream> #include <algorithm> #include <memory> #include <string.h> using namespace std; void sorting(char b[], int n) { int i; pair<char*, ptrdiff_t> p = get_temporary_buffer<char>(n); // copy the contents in temporary buffer with pair uninitialized_copy(b, b + p.second, p.first); // sort char array sort(p.first, p.first + p.second); cout << "sorted characters are :" << endl; for (i = 0; i < p.second; i++) { cout << p.first[i] << " "; } // to release the temporary buffer return_temporary_buffer(p.first); } // driver program to test above function int main() { char str[] = { 'b', 'g', 'y', 'v', 'p' }; int c; c = strlen(str); sorting(str, c); return 0; }
sorted characters are : b g p v y
Aplicación: Los algoritmos a menudo requerían espacio temporal para funcionar correctamente. Tiene un propósito muy especializado utilizado internamente por STL en algoritmos como stable_partition , stable_sort e inplace_merge ; utilizan memoria temporal adicional para almacenar resultados intermedios y su complejidad en tiempo de ejecución es mejor si hay memoria adicional disponible.
Este artículo es una contribución de Shivani Baghel . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks.
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