Bolehkah saya Merawat std::vector Elements as Contiguous Arrays?
Timbul persoalan sama ada elemen dalam std::vector dijamin untuk menduduki alamat memori bersebelahan, membolehkan kami menganggap penunjuknya kepada elemen pertama sebagai a C-array.
Konteks Sejarah:
Dalam piawai C 98, jaminan ini tiada. Namun begitu, keperluan piawai untuk std::vector menjadikannya tidak mungkin elemen tidak bersebelahan.
Standard Semasa:
Walau bagaimanapun, perkara ini telah dijelaskan dalam C 0x (kemudian dinamakan semula kepada C 11) standard. Menurut TR yang meminda piawaian C 98: "Unsur vektor disimpan bersebelahan." Ini bermakna untuk vektor jenis selain bool, perkara berikut berlaku:
&v[n] == &v[0] + n
di mana:
Contoh:
Akibatnya, kod berikut kini sah dan akan berfungsi seperti yang diharapkan:
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' } }
Atas ialah kandungan terperinci Adakah Elemen std::vector Dijamin Bersebelahan dalam Ingatan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!