Sto usando una libreria esterna che ad un certo punto mi dà un puntatore non elaborato a una matrice di numeri interi e dimensioni.
Ora vorrei utilizzare std::vector
per accedere e modificare questi valori sul posto, anziché accedervi con puntatori non elaborati.
Ecco un esempio articolare che spiega il 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
}
Uscita prevista:
1
2
3
4
5
Il motivo è che devo applicare algoritmi da <algorithm>
(ordinamento, scambio di elementi, ecc.) Su quei dati.
D'altra parte la modifica della dimensione di quel vettore non sarebbe mai essere cambiato, così push_back
, erase
, insert
non sono tenuti a lavorare su quel vettore.
Potrei costruire un vettore basato sui dati della libreria, usare modificare quel vettore e copiare i dati nella libreria, ma sarebbero due copie complete che vorrei evitare poiché il set di dati potrebbe essere davvero grande.
std::vector
funziona così .
sort(arrayPointer, arrayPointer + elementCount);
.
std::vector_view
, vero?