-2
votes

Différence entre auto it = v.begin () et int it = v.begin (), où v est un vecteur

Il me donnait cette erreur lorsque j'ai utilisé int it = v.begin () : xxx

mais ça a fonctionné bien avec Auto it = v.begin () , pourquoi?


5 commentaires

auto déterminera ce que le type doit être. Lorsque vous utilisez auto , il fabrique it a std :: vecteur :: itérateur . std :: vecteur :: Commencez retourne un std :: vecteur :: itérateur , pas un int .


commence () retourne un itérateur, pas un int


STD :: Vecteur :: commence (() ne renvoie pas de type intégré, donc int it = v.begin () ne compilera pas. auto it = v.begin () fonctionnera, car il déduit le type retourné.


Vous pouvez être déroutant V.front () avec v.begin () . 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.


3 Réponses :


4
votes
  auto it = v.begin()

0 commentaires

0
votes

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.

Un entier est tout simplement un nombre entier, 1, 2, 3, 4 ...

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

auto déduire simplement le type lui-même afin qu'il puisse comprendre que .begin () renvoie un itérateur.


2 commentaires

Cette réponse est presque aussi bonne que celle de asmmo sauf Un itérateur est un pointeur . 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.



0
votes

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();
        


0 commentaires