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

Adakah Penyimpanan Elemen `std::vector` Dijamin Bersebelahan dalam C ?

Patricia Arquette
Lepaskan: 2024-12-30 12:18:09
asal
823 orang telah melayarinya

Is `std::vector`'s Element Storage Guaranteed to Be Contiguous in C  ?

Adakah Elemen std::vector Dijamin Bersebelahan?

Walaupun piawaian C 98 tidak secara eksplisit menjamin elemen bersebelahan dalam std: :vector, keperluan untuk std::vector menjadikannya sangat tidak mungkin unsur-unsur itu tidak bersebelahan. Walau bagaimanapun, ini kemudiannya dijelaskan sebagai keperluan dalam draf n2798 piawai C 0x.

Piawaian C 0x yang akan datang termasuk keperluan berikut:

A vector is a sequence container that supports random access iterators. In addition, it supports (amortized) constant time insert and erase operations at the end; insert and erase in the middle take linear time. Storage management is handled automatically, though hints can be given to improve efficiency. The elements of a vector are stored contiguously, meaning that if v is a vector where T is some type other than bool, then it obeys the identity &v[n] == &v[0] + n for all 0 <= n < v.size().
Salin selepas log masuk

Ini bermakna anda boleh selamat gunakan penuding kepada elemen pertama std::vector sebagai C-array, seperti dalam contoh berikut:

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 Penyimpanan Elemen `std::vector` Dijamin Bersebelahan dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan