Rumah > pembangunan bahagian belakang > C++ > Adakah Elemen std::vector Dijamin Bersebelahan dalam Ingatan?

Adakah Elemen std::vector Dijamin Bersebelahan dalam Ingatan?

DDD
Lepaskan: 2024-12-26 05:35:38
asal
777 orang telah melayarinya

Are std::vector Elements Guaranteed to Be Contiguous in Memory?

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
Salin selepas log masuk

di mana:

  • v ialah vektor
  • n ialah indeks antara 0 dan v.size() - 1

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'
    }
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan