Korzystam z zewnętrznej biblioteki, która w pewnym momencie daje mi surowy wskaźnik do tablicy liczb całkowitych i rozmiaru.
Teraz chciałbym użyć, std::vector
aby uzyskać dostęp i zmodyfikować te wartości w miejscu, zamiast uzyskiwać do nich dostęp za pomocą surowych wskaźników.
Oto sztuczny przykład, który wyjaśnia tę kwestię:
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
}
Oczekiwany wynik:
1
2
3
4
5
Powodem jest to, że muszę zastosować algorytmy z <algorithm>
(sortowania, zamiany elementów itp.) Na tych danych.
Z drugiej strony zmiany rozmiaru tego wektora nigdy nie zostanie zmieniona, tak push_back
, erase
, insert
nie są wymagane do pracy na tym wektorze.
Mógłbym zbudować wektor na podstawie danych z biblioteki, użyć zmodyfikować ten wektor i skopiować dane z powrotem do biblioteki, ale byłyby to dwie kompletne kopie, których chciałbym uniknąć, ponieważ zestaw danych mógłby być naprawdę duży.
std::vector
działa.
sort(arrayPointer, arrayPointer + elementCount);
.
std::vector_view
, prawda?