Ich verwende eine externe Bibliothek, die mir irgendwann einen unformatierten Zeiger auf ein Array von Ganzzahlen und eine Größe gibt.
Jetzt möchte ich auf std::vector
diese Werte zugreifen und sie ändern, anstatt mit rohen Zeigern darauf zuzugreifen.
Hier ist ein künstliches Beispiel, das den Punkt erklärt:
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
}
Erwartete Ausgabe:
1
2
3
4
5
Der Grund ist, dass ich Algorithmen aus <algorithm>
(Sortieren, Austauschen von Elementen usw.) auf diese Daten anwenden muss .
Auf der anderen Seite würde die Größe dieses Vektors ändert nie, so geändert werden push_back
, erase
, insert
nicht auf diesem Vektor zur Arbeit benötigt.
Ich könnte einen Vektor basierend auf den Daten aus der Bibliothek erstellen, diesen Vektor ändern und die Daten zurück in die Bibliothek kopieren, aber das wären zwei vollständige Kopien, die ich vermeiden möchte, da der Datensatz sehr groß sein könnte.
std::vector
funktioniert das nicht .
sort(arrayPointer, arrayPointer + elementCount);
.
std::vector_view
, nicht wahr?