Saya menggunakan perpustakaan eksternal yang pada beberapa titik memberi saya pointer mentah ke array bilangan bulat dan ukuran.
Sekarang saya ingin menggunakan std::vector
untuk mengakses dan memodifikasi nilai-nilai ini di tempat, daripada mengaksesnya dengan pointer mentah.
Berikut adalah contoh artikifial yang menjelaskan intinya:
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
}
Output yang diharapkan:
1
2
3
4
5
Alasannya adalah bahwa saya perlu menerapkan algoritma dari <algorithm>
(menyortir, menukar elemen dll) pada data itu.
Di sisi lain mengubah ukuran vektor yang tidak akan pernah berubah, jadi push_back
, erase
, insert
tidak diharuskan untuk bekerja pada vektor itu.
Saya bisa membuat vektor berdasarkan data dari perpustakaan, gunakan memodifikasi vektor itu dan menyalin data kembali ke perpustakaan, tapi itu akan menjadi dua salinan lengkap yang ingin saya hindari karena kumpulan data bisa sangat besar.
std::vector
kerjanya.
sort(arrayPointer, arrayPointer + elementCount);
.
std::vector_view
, bukan?