Я использую внешнюю библиотеку, которая в какой-то момент дает мне необработанный указатель на массив целых чисел и размер.
Теперь я хотел бы использовать 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
, не так ли?