Rumah > pembangunan bahagian belakang > C++ > Akses Peta Const: Mengapa Gunakan `at()` Daripada `operator[]`?

Akses Peta Const: Mengapa Gunakan `at()` Daripada `operator[]`?

DDD
Lepaskan: 2024-12-04 09:30:12
asal
120 orang telah melayarinya

Const Map Access: Why Use `at()` Instead of `operator[]`?

Mengakses Elemen dalam Peta Konst: Operator[] vs. at()

Apabila bekerja dengan peta malar, mengakses elemen menggunakan operator[ ] mungkin gagal. Walau bagaimanapun, menggunakan at() adalah alternatif yang berdaya maju. Mengapakah ini berlaku?

Dalam peta bukan const, operator[] melaksanakan dua fungsi:

  • Jika kunci wujud, ia mengembalikan rujukan kepada nilai yang berkaitan.
  • Jika kunci tidak wujud, ia membina nilai binaan lalai yang dikaitkan dengan kunci dan mengembalikan rujukan kepada ia.

Walau bagaimanapun, dalam peta const, operator[] tidak dibenarkan mengubah suai struktur data asas. Oleh itu, ia hanya boleh melaksanakan fungsi pertama dan melemparkan ralat apabila cuba memasukkan elemen baharu menggunakan fungsi kedua.

Sebaliknya, at() ialah kaedah yang diperkenalkan dalam C 11 khusus untuk mengakses elemen dalam a peta const. Ia memberikan beberapa faedah:

  • Ia memberikan pengecualian std::out_of_range jika kunci tidak wujud, menjadikannya konsisten dengan bekas lain seperti vektor dan deque.
  • Ia mempunyai const overload, membenarkan penggunaannya pada peta const.

Atas sebab ini, at() ialah kaedah yang disyorkan untuk mengakses elemen dalam const std::map. Kod contoh:

#include <iostream>
#include <map>

int main()
{
    std::map<int, char> A;
    A[1] = 'b';
    A[3] = 'c';

    const std::map<int, char>& B = A;

    std::cout << B.at(3) << std::endl; // it works
    std::cout << B[3] << std::endl;    // it does not work
}
Salin selepas log masuk

Akan mengeluarkan:

c
error: can't access elements with operator[] in a const std::map
Salin selepas log masuk

Atas ialah kandungan terperinci Akses Peta Const: Mengapa Gunakan `at()` Daripada `operator[]`?. 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