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.

28
demandé sur tekknolagi 2011-11-22 07:41:24

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