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
801 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!

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