Il me donnait cette erreur lorsque j'ai utilisé mais ça a fonctionné bien avec int it = v.begin () code>: Auto it = v.begin () code>, pourquoi? p> p>
3 Réponses :
auto it = v.begin()
C'est parce que les itérateurs ne sont pas des entiers. Un itérateur est un pointeur qui pointe vers un élément dans une liste comme un vecteur. P>
Un entier est tout simplement un nombre entier, 1, 2, 3, 4 ... p>
Vous ne pouvez pas attribuer un itérateur à un entier car ils ne sont pas les mêmes. Voici un lien pour lire un peu plus dans les itérateurs P>
auto code> déduire simplement le type lui-même afin qu'il puisse comprendre que .begin () code> renvoie un itérateur. P>
Cette réponse est presque aussi bonne que celle de asmmo sauf Un itérateur est un pointeur i>. Cela semble littéralement comme un pointeur brut. Ceci est un détail de mise en œuvre (et cela pourrait être vrai sur votre plate-forme et est sur le mien Afaik) mais vous ne pouvez pas compter sur elle.
@Scheff assez juste. Bien que juger par la question à portée de main, il se sent approprié de ne pas plonger super profond.
Deux points à retenir:
v.begin () code> est un itérateur pointant vers le premier élément de votre vecteur v code>. Cet itérateur, en ce qui concerne être un conteneur de vecteur de type entier, a une forme de std :: vecteur :: iterator code>, et pas int code>. Li >
-
auto code> est automatiquement du type de données à partir de son initialiseur et attribue que le type de données de la variable déclarée l'utiliser.
li>
ul>
corrections / alternatives possibles? p>
- Si vous cherchiez à extraire l'itérateur au premier élément em> dans le vecteur, alors bâton avec auto ou définissez l'itérateur: li>
ul>
xxx pré>
- Si vous cherchiez à extraire le premier élément em>, puis déclarez-le avec son type de données, qui sera un
int code> pour un vecteur de int Code> Type: (Comme vous auriez pu penser, et comme indiqué par SMAC89 aussi) LI>
ul> xxx pré> ou vous pouvez utiliser Auto à nouveau: p>
auto it = v.front();
auto code> déterminera ce que le type doit être. Lorsque vous utilisezauto code>, il fabriqueit code> astd :: vecteur :: itérateur code>.std :: vecteur :: Commencez code> retourne unstd :: vecteur :: itérateur code>, pas unint code>.commence () code> retourne un itérateur, pas un intSTD :: Vecteur :: commence (() code> ne renvoie pas de type intégré, donc int it = v.begin () code> ne compilera pas.auto it = v.begin () code> fonctionnera, car il déduit le type retourné.Vous pouvez être déroutant
V.front () code> avecv.begin () code>. Le premier retournera le premier élément du vecteur pendant que la dernière retourne un itérateur du début du vecteur.@ Chatterjee7 plz, si vous sentez qu'il y a une réponse rencontre votre question, acceptez-la. Sinon, fournissez-nous plus d'informations sur ce que vous avez mal compris.