Maison > développement back-end > C++ > Const Map Access : pourquoi utiliser `at()` au lieu de `operator[]` ?

Const Map Access : pourquoi utiliser `at()` au lieu de `operator[]` ?

DDD
Libérer: 2024-12-04 09:30:12
original
422 Les gens l'ont consulté

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

Accès aux éléments dans une carte Const : Operator[] vs. at()

Lorsque vous travaillez avec des cartes constantes, accédez aux éléments à l'aide de l'opérateur[ ] peut échouer. Cependant, utiliser at() est une alternative viable. Pourquoi est-ce le cas ?

Dans une carte non const, Operator[] remplit deux fonctions :

  • Si la clé existe, elle renvoie une référence à la valeur associée.
  • Si la clé n'existe pas, il construit une valeur construite par défaut associée à la clé et renvoie une référence à it.

Cependant, dans une carte const, Operator[] n'est pas autorisé à modifier la structure de données sous-jacente. Par conséquent, il ne peut exécuter que la première fonction et génère une erreur lorsqu'il tente d'insérer un nouvel élément à l'aide de la deuxième fonction.

En revanche, at() est une méthode introduite en C 11 spécifiquement pour accéder aux éléments d'un carte const. Il offre plusieurs avantages :

  • Il lève une exception std::out_of_range si la clé n'existe pas, la rendant cohérente avec d'autres conteneurs comme vector et deque.
  • Il a un const surcharge, permettant son utilisation sur les cartes const.

Pour ces raisons, at() est la méthode recommandée pour accéder aux éléments dans un const std :: carte. L'exemple de code :

#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
}
Copier après la connexion

Sera affiché :

c
error: can't access elements with operator[] in a const std::map
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal