Saya mencoba menggunakan std::vector
sebagai char
array.
Fungsi saya menerima pointer kosong:
void process_data(const void *data);
Sebelumnya saya hanya menggunakan kode ini:
char something[] = "my data here";
process_data(something);
Yang bekerja seperti yang diharapkan.
Tapi sekarang saya perlu dinamika std::vector
, jadi saya mencoba kode ini sebagai gantinya:
vector<char> something;
*cut*
process_data(something);
Pertanyaannya adalah, bagaimana cara meneruskan vektor char ke fungsi saya sehingga saya dapat mengakses data mentah vektor (tidak peduli format apa itu - mengapung, dll.)?
Saya mencoba ini:
process_data(&something);
Dan ini:
process_data(&something.begin());
Tapi itu kembali pointer ke data yang omong kosong, dan yang terakhir memberikan peringatan: warning C4238: nonstandard extension used : class rvalue used as lvalue
.
vector<bool>
yang merupakan pengecualian untuk jawaban ini (dan tidak memiliki penyimpanan memori yang berdekatanbool
s).std::vector<bool>
karenastd::vector<bool>
memerlukan penggunaan objek proxy dan proxy itu tidak dapat secara implisit dikonversi menjadibool*
. Sebagai solusi untuk ini, jika Anda memang membutuhkan urutanbool
, yang terbaik hanya menggunakan astd::vector<char>
. @Motti.data()
- Saya hanya akan berpura-pura saya tidak melihat itu jelek&*iterator
: Pdata()
live? Jika vektor tidak pernah diubah ukurannya menjadi lebih besar atau lebih kecil (melaluipush_back()
atau fungsi lainnya, termasukreserve
), apakah dijamin bahwa pointer akan hidup selama vektor hidup, menunjuk ke tempat yang benar?something.data()
akan mengembalikan pointer ke ruang data vektor.sumber
error C2039: 'data' : is not a member of 'std::vector<_Ty>'
vector::data()
baru untuk C ++ 11Sebagai gantinya, ambil pointer ke elemen pertama:
sumber