Accéder aux éléments d'un vecteur en C++?
j'ai souvent trouvé que les gens utilisent les crochets de tableau [] et une fonction normale de vecteur .at (). Pourquoi il y a deux méthodes distinctes? Quels sont les avantages et les inconvénients des deux? Je le sais .at () est plus sûr, mais y a-t-il des situations où .AT () ne peut pas être utilisé? Et si .at () est toujours plus sûr, pourquoi toujours utiliser des crochets de tableau [].
j'ai cherché partout mais impossible de trouver une question similaire. Si une question comme celle-ci existe déjà s'il vous plaît envoyez-moi à elle et je supprimerai ceci question.
7 réponses
std::vector::at()
vous protège contre l'accès aux éléments du réseau hors des limites en lançant un out_of_bounds
exception contrairement à la []
opérateur qui ne prévient pas ou ne lance pas d'exceptions lors de l'accès au-delà des limites du vecteur.
std::vector
est/a été considéré comme un c++/remplacement de construire pour la Variable de Tableaux de Longueur(VLA) en c99. Pour que les tableaux de style c puissent être facilement remplacés par std::vector
il fallait que les vecteurs fournissent une interface similaire à celle d'un tableau, donc vecteur fournit []
opérateur pour accéder à ses éléments. En même temps, le Comité des normes c++ a peut-être aussi senti le besoin de fournir une sécurité supplémentaire pour std::vector
plus de style c tableaux et donc ils ont également fourni std::Vector::at()
méthode qui la fournit.
Naturellement, at()
la méthode vérifie la taille du vecteur avant de le déréférencer et cela sera un peu au-dessus (peut-être négligeable dans la plupart des cas d'utilisation) au-dessus des éléments d'accès par