Pertanyaan saya sederhana: apakah elemen std :: vector dijamin bersebelahan? Dalam urutan kata, dapatkah saya menggunakan penunjuk ke elemen pertama dari std :: vector sebagai C-array?
Jika ingatan saya bermanfaat bagi saya, standar C ++ tidak membuat jaminan seperti itu. Namun, persyaratan std :: vector sedemikian rupa sehingga hampir tidak mungkin untuk memenuhinya jika elemen tidak bersebelahan.
Adakah yang bisa menjelaskan ini?
Contoh:
std::vector<int> values;
// ... fill up values
if( !values.empty() )
{
int *array = &values[0];
for( int i = 0; i < values.size(); ++i )
{
int v = array[i];
// do something with 'v'
}
}
values
, khususnya yang mengubah ukurannya (mis., push_back()
), Dapat meminta realokasi vektor yang mendasari yang membatalkan penunjuk yang disalin array
. Ini prinsip yang sama di belakang menggunakan vektor :: iterator alih-alih penunjuk ke vektor. :)
values
di dalamif
blok itu. Saya tidak tahu jawaban atas pertanyaan Anda, jadi saya hanya meninggalkan komentar. :)