Eu estou usando uma biblioteca externa que em algum momento me dá um ponteiro bruto para uma matriz de números inteiros e um tamanho.
Agora eu gostaria de usar std::vector
para acessar e modificar esses valores no lugar, em vez de acessá-los com ponteiros brutos.
Aqui está um exemplo articifial que explica o ponto:
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
}
Saída esperada:
1
2
3
4
5
O motivo é que preciso aplicar algoritmos <algorithm>
(classificação, troca de elementos etc.) nesses dados.
Por outro lado alterando o tamanho desse vector nunca iria ser mudado, assim push_back
, erase
, insert
não são obrigados a trabalhar nisso vetor.
Eu poderia construir um vetor com base nos dados da biblioteca, usar modificar esse vetor e copiar os dados de volta para a biblioteca, mas seriam duas cópias completas que eu gostaria de evitar, pois o conjunto de dados pode ser muito grande.
std::vector
funciona.
sort(arrayPointer, arrayPointer + elementCount);
.
std::vector_view
, não é?