Estoy usando una biblioteca externa que en algún momento me da un puntero en bruto a una matriz de enteros y un tamaño.
Ahora me gustaría utilizar std::vector
para acceder y modificar estos valores en su lugar, en lugar de acceder a ellos con punteros sin formato.
Aquí hay un ejemplo articular que explica el punto:
size_t size = 0;
int * data = get_data_from_library(size); // raw data from library {5,3,2,1,4}, size gets filled in
std::vector<int> v = ????; // pseudo vector to be used to access the raw data
std::sort(v.begin(), v.end()); // sort raw data in place
for (int i = 0; i < 5; i++)
{
std::cout << data[i] << "\n"; // display sorted raw data
}
Rendimiento esperado:
1
2
3
4
5
La razón es que necesito aplicar algoritmos de <algorithm>
(clasificación, intercambio de elementos, etc.) en esos datos.
Por otro lado cambiar el tamaño de ese vector no sería cambiado, por lo que push_back
, erase
, insert
no están obligados a trabajar en ese vector.
Podría construir un vector basado en los datos de la biblioteca, usar modificar ese vector y copiar los datos de nuevo a la biblioteca, pero serían dos copias completas que me gustaría evitar ya que el conjunto de datos podría ser realmente grande.
std::vector
funciona.
sort(arrayPointer, arrayPointer + elementCount);
.
std::vector_view
, ¿no?