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
DDDoriginal
2024-12-04 09:30:12128parcourir

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
}

Sera affiché :

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

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