Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah saya boleh mengakses bekas asas dalam penyesuai bekas STL seperti tindanan, baris gilir dan priority_queue?

Bagaimanakah saya boleh mengakses bekas asas dalam penyesuai bekas STL seperti tindanan, baris gilir dan priority_queue?

Patricia Arquette
Patricia Arquetteasal
2024-11-02 17:58:28514semak imbas

How can I access the underlying container in STL container adaptors like stack, queue, and priority_queue?

Mengakses Bekas Dasar dalam Penyesuai Bekas STL

Mengakses bekas asas dalam penyesuai bekas STL, seperti tindanan, baris gilir dan priority_queue, telah lama menjadi subjek rasa ingin tahu. Walaupun mungkin tiada kaedah standard rasmi, teknik pintar yang dikenali sebagai "penggodaman kontena" boleh digunakan.

Penggodaman Bekas

Pendekatan ini melibatkan mewujudkan kelas pembantu diperoleh daripada penyesuai kontena yang diminati. Kelas terbitan ini mendedahkan kaedah Container() statik yang mengembalikan rujukan kepada bekas asas.

Pertimbangkan coretan kod berikut:

<code class="cpp">template <class T, class S, class C>
S& Container(priority_queue<T, S, C>& q) {
    struct HackedQueue : private priority_queue<T, S, C> {
        static S& Container(priority_queue<T, S, C>& q) {
            return q.*&HackedQueue::c;
        }
    };
    return HackedQueue::Container(q);
}

int main() {
    priority_queue<SomeClass> pq;
    vector<SomeClass>& tasks = Container(pq);
    return 0;
}</code>

Di sini, struct HackedQueue, yang mewarisi daripada priority_queue , mendedahkan kaedah Container(). Kaedah ini memberikan akses kepada vektor asas yang menyimpan elemen dalam baris gilir keutamaan.

Pendekatan Bukan Standard

Dalam Visual Studio 2008, penyesuai bekas tertentu menyediakan bukan -kaedah _Get_container() standard untuk mengakses bekas asas. Walau bagaimanapun, kaedah ini bukan sebahagian daripada standard rasmi dan mungkin tidak tersedia dalam semua pelaksanaan.

Dokumentasi Rasmi

Untuk dokumentasi berwibawa pada perpustakaan standard C, rujuk ke Rujukan Perpustakaan Standard C di https://www.cppreference.com/. Laman web ini menyediakan maklumat yang komprehensif tentang sintaks, semantik dan penggunaan semua komponen perpustakaan standard.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mengakses bekas asas dalam penyesuai bekas STL seperti tindanan, baris gilir dan priority_queue?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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