Я використовую зовнішню бібліотеку, яка в якийсь момент дає мені необроблений покажчик на масив цілих чисел та розмірів.
Тепер я хотів би використати std::vector
для доступу та зміни цих значень на місці, а не для доступу до них із необробленими покажчиками.
Ось мистецький приклад, який пояснює суть:
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
}
Очікуваний вихід:
1
2
3
4
5
Причина полягає в тому, що мені потрібно застосувати алгоритми <algorithm>
(сортування, підміна елементів тощо) до цих даних.
З іншого боку зміни розміру цього вектора рука ніколи не буде змінена, тому push_back
, erase
, insert
не зобов'язані працювати на цьому векторі.
Я міг би побудувати вектор на основі даних з бібліотеки, використовувати модифікацію цього вектора та копіювання даних назад у бібліотеку, але це були б дві повні копії, яких я б хотів уникнути, оскільки набір даних може бути справді великим.
std::vector
працює.
sort(arrayPointer, arrayPointer + elementCount);
.
std::vector_view
, чи не так?