J'utilise une bibliothèque externe qui à un moment donné me donne un pointeur brut vers un tableau d'entiers et une taille.
Maintenant, j'aimerais utiliser std::vector
pour accéder et modifier ces valeurs en place, plutôt que d'y accéder avec des pointeurs bruts.
Voici un exemple explicatif qui explique le point:
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
}
Production attendue:
1
2
3
4
5
La raison en est que je dois appliquer des algorithmes à partir de <algorithm>
(tri, échange d'éléments, etc.) sur ces données.
D'autre part changer la taille de ce vecteur ne serait jamais changé, donc push_back
, erase
, insert
ne sont pas tenus de travailler sur ce vecteur.
Je pourrais construire un vecteur basé sur les données de la bibliothèque, utiliser modifier ce vecteur et copier les données dans la bibliothèque, mais ce serait deux copies complètes que j'aimerais éviter car l'ensemble de données pourrait être très volumineux.
std::vector
marche.
sort(arrayPointer, arrayPointer + elementCount);
.
std::vector_view
, n'est-ce pas?