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 utilisez
auto code>, il fabrique
it code> a
std :: vecteur :: itérateur code>.
std :: vecteur :: Commencez code> retourne un
std :: vecteur :: itérateur code>, pas un
int code>.
commence () code> retourne un itérateur, pas un int
STD :: 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> avec
v.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.