Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimanakah Range-Based for() Loops berfungsi dengan std::map dalam C ?

Bagaimanakah Range-Based for() Loops berfungsi dengan std::map dalam C ?

Linda Hamilton
Linda Hamiltonasal
2024-10-29 03:27:291066semak imbas

 How do Range-Based for() Loops Work with std::map in C  ?

Menggunakan Range-Based for() Gelung dengan std::map

Julat-based for() gelung dalam C 11 dan seterusnya sediakan cara yang mudah untuk mengulangi bekas. Walaupun contoh sering mempamerkan bekas ringkas seperti vektor, kekeliruan timbul apabila menggunakannya dengan struktur data yang lebih kompleks seperti peta.

Apabila menggunakan gelung berasaskan julat untuk() dengan peta, jenis elemen tidak semudah itu. nampaknya. Pertimbangkan contoh berikut:

<code class="cpp">std::map<foo, bar> testing = { /*...blah...*/ };
for (auto abc : testing)
{
    std::cout << abc << std::endl;         // ? should this give a foo? a bar?
    std::cout << abc->first << std::endl;  // ? or is abc an iterator?
}

Tidak seperti vektor, dengan pembolehubah gelung ialah jenis elemen bekas (cth., int), pembolehubah gelung abc untuk peta sebenarnya daripada jenis std::pair< ;const foo, bar>. Ini bermakna abc memegang sepasang yang mengandungi kedua-dua kunci dan nilai peta.

Dalam C 17 dan kemudian, anda boleh mengakses terus kekunci dan nilai menggunakan pengikatan berstruktur:

<code class="cpp">for (auto& [key, value] : myMap)
{
    std::cout << key << " has value " << value << std::endl;
}</code>

Dalam C 11 dan C 14, anda masih boleh mengulangi peta menggunakan gelung untuk dipertingkat, tetapi anda perlu mengekstrak kunci dan nilai secara manual:

<code class="cpp">for (const auto& kv : myMap)
{
    std::cout << kv.first << " has value " << kv.second << std::endl;
}</code>

Adalah penting untuk memahami bahawa pembolehubah gelung abc atau kv dalam contoh ini bukan lelaran. Sebaliknya, ia mewakili salinan pasangan yang mengandungi kunci dan nilai elemen peta semasa. Perbezaan ini penting apabila mempertimbangkan pengubahsuaian atau rujukan kepada elemen peta dalam gelung.

Atas ialah kandungan terperinci Bagaimanakah Range-Based for() Loops berfungsi dengan std::map dalam C ?. 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