IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les r�ponses en temps r�el, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Iterateurs null


Sujet :

C++

  1. #1
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut Iterateurs null
    Bonjour, jai un bout de code dans le logiciel que je dois maintenir qui est le suivant

    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    std::vector<CAS_FRONT*>::iterator i,nouveau=NULL;
    Ma question:

    A quoi sert le null?? Par defaut lorsquon fait seulement declarer literateur sans lui dire exemple v.begin() il pointe sur null non???

    Ca fonctionne sous borland mais sous Unix/gcc il dit

    mailleur3d_front.cpp:661: error: conversion from `int' to non-scalar type `__gnu_cxx::__normal_ite rator<CAS_FRONT**, std::vector<CAS_FRONT*, std::allocator<CAS_FRONT*> > >' requested


    Par la suite, pour savoir si literateur pointe sur null est-ce quon peut faire if !(*iterateur) ??

    Merci

  2. #2
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut
    Si l'it�rateur pointe sur NULL, *it va lancer une exception.
    Par contre, ( ! it ) devrait renvoyer true, conform�ment � la norme (qui dit qu'un it�rateur doit se comporter comme un pointeur). Cela dit, conform�ment � la norme,
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    vector<machin>::iterator it = NULL;
    devrait compiler. Mieux vaut tester, donc...

  3. #3
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Le hic cest que gcc prend pas le i = NULL;

    Il dit
    Code : S�lectionner tout - Visualiser dans une fen�tre � part
    1
    2
     
    error: conversion from `int' to non-scalar type `__gnu_cxx::__normal_ite rator<CAS_FRONT**, std::vector<CAS_FRONT*, std::allocator<CAS_FRONT*> > >' requested

  4. #4
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    D'abord un rappel.
    Un it�rateur n'est pas un pointeur !!!

    Un pointeur est par contre un repr�sentant particulier des it�rateurs dits � acc�s direct.
    Certaines impl�mentations de vecteur impl�mentent std::vector<>::iterator comme un pointeur. Mais:
    - c'est un d�tail d'impl�mentation
    - cela peut varier d'une impl�mentation � l'autre (propri�taire)
    - cela ne veut pas dire que l'on puisse en faire quoique ce soit.

    Les it�rateurs sont des objets servant � r�f�rencer des donn�es "vivant" dans des plages it�rables. Ces plages sont, pour 99.99% d'entre elles, d�finies par deux choses :
    - un it�rateur, d�r�f�ren�able (si la plage est non vide), de d�but de plage
    - un it�rateur, non-d�f�ren�able de fin de plage.
    Suivant les notations, on trouve: [debut,fin[ ou [d�but,fin).

    En sorte de corrolaire, un it�rateur est consid�r� d�f�ren�able par rapport � une plage de donn�es. Et un it�rateur sera consid�r� non valide, par rapport � une plage, s'il est "�gal" au dernier �l�ment d�finissant la plage.

    Ainsi, un it�rateur peut dans l'absolu pointer vers une donn�e valide, mais �tre consid�r� comme non-d�f�ren�able dans le cadre d'un traitrement. p.ex. une recherche parmi les 4 premiers �l�ments (soit sur [debut,debut+4[), d'une plus grande collection, qui renverrait debut+4 (le potentiellement 5e �l�ment) signifirait que l'on n'a rien trouv�.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  5. #5
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Ouais dans mon cas finalement je set a mon vector.end() au d�part. C'est ce qui me permet de remplacer le NULL qui plantait sous gcc.

  6. #6
    Expert confirm�
    Avatar de Luc Hermitte
    Homme Profil pro
    D�veloppeur informatique
    Inscrit en
    Ao�t 2003
    Messages
    5 296
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyr�n�es)

    Informations professionnelles :
    Activit� : D�veloppeur informatique
    Secteur : A�ronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Ao�t 2003
    Messages : 5 296
    Par d�faut
    Mais. C'est normal que cela plante. Null n'a aucun sens pour un it�rateur.
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne r�ponds � aucune question technique par le biais de ce m�dia. Et de toutes fa�ons, ma BAL sur dvpz est pleine...

  7. #7
    Membre �clair� Avatar de vdumont
    Profil pro
    �tudiant
    Inscrit en
    F�vrier 2006
    Messages
    510
    D�tails du profil
    Informations personnelles :
    �ge : 39
    Localisation : Canada

    Informations professionnelles :
    Activit� : �tudiant

    Informations forums :
    Inscription : F�vrier 2006
    Messages : 510
    Par d�faut
    Je sais ca fait aucun sens, je comprend pas pourquoi Borland tol�rait cela.

  8. #8
    R�dacteur
    Avatar de Laurent Gomila
    Profil pro
    D�veloppeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    D�tails du profil
    Informations personnelles :
    �ge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activit� : D�veloppeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par d�faut
    Citation Envoy� par vdumont
    Je sais ca fait aucun sens, je comprend pas pourquoi Borland tol�rait cela.
    Parce que, comme te l'a dit Luc; il y a des impl�mentations pour lesquelles vector<T>::iterator n'est qu'un typedef pour T*.

  9. #9
    Membre �m�rite Avatar de Herode
    Homme Profil pro
    D�veloppeur Web
    Inscrit en
    Mars 2005
    Messages
    825
    D�tails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Savoie (Rh�ne Alpes)

    Informations professionnelles :
    Activit� : D�veloppeur Web
    Secteur : High Tech - Multim�dia et Internet

    Informations forums :
    Inscription : Mars 2005
    Messages : 825
    Par d�faut
    Sans doute aussi parce que la norme le sugg�re :
    Citation Envoy� par ISOIEC4882-1998, 24.2
    Since iterators are an abstraction of pointers, their semantics is a generalization of most of the semantics of pointers in C++. This ensures that every template function that takes iterators works as well with regular pointers.
    Rien n'interdit d'ailleurs que "past_the_end" vaille NULL. Reste que dans du code propre, il est effectivement pr�f�rable de tester son it�rateur vs. end().

+ R�pondre � la discussion
Cette discussion est r�solue.

Discussions similaires

  1. PROBLEME AVEC LES REQUETES IS NULL / NOT EXISTS
    Par sylvaine dans le forum Langage SQL
    R�ponses: 5
    Dernier message: 04/06/2004, 13h26
  2. Comment rediriger la sortie vers /dev/null
    Par dclink dans le forum C
    R�ponses: 4
    Dernier message: 24/06/2003, 18h23
  3. Tester si un champ est NULL
    Par titititi007 dans le forum MS SQL Server
    R�ponses: 3
    Dernier message: 19/06/2003, 10h17
  4. [VB6] [BDD] Recordset et champ égal à Null
    Par Gr|ppen dans le forum VB 6 et ant�rieur
    R�ponses: 3
    Dernier message: 07/03/2003, 10h00
  5. "ALTERER" une col. NULL en NOT NULL - Int
    Par Gandalf24 dans le forum SQL
    R�ponses: 2
    Dernier message: 28/12/2002, 00h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo