std::vector Zugriff auf Inhalt



  • Hi,

    mittels welcher Methoden kann ich Werte innerhalb einem std::vector verändern? Z.B. möchte ich den Bool avail in der for-Schleife bei jedem Element im Array außer dem ersten auf Null setzen.

    typedef struct 
    {
        CString ip; 
        CString shortname; 
        BOOL	avail;					
    }NODE_LIST;
    
    for( itor iter = m_NodeList.begin(); iter != m_NodeList.end(); ++iter)
    {
       BOOL test = iter->avail; 
    
    }
    

    Gruß
    Konrad



  • Und wo genau liegt jetzt das Problem, geht iter->avail = FALSE; nicht!?



  • std::vector<NODE_LIST> m_NodeList;
    std::vector<NODE_LIST>::iterator itor;
    
    for( itor = m_NodeList.begin(); itor != m_NodeList.end(); ++itor) 
    { 
       if(itor != m_NodeList.begin())
          itor->avail = NULL;             
    }
    


  • dot schrieb:

    Und wo genau liegt jetzt das Problem, geht iter->avail = FALSE; nicht!?

    leider nicht, da bekomme ich immer die Fehlermeldung "expression is not a modified value".... egal was ich avail gebe...

    Hier noch meine beiden Definitions:

    std::vector<NODE_LIST>				m_NodeList; 
    typedef std::vector<NODE_LIST>::const_iterator	itor;
    

    Vielleicht ist hier ein Fehler vorhanden...



  • Der const_iterator lässt eben keine Änderung am Element zu.

    typedef std::vector<NODE_LIST>::iterator    itor;
    


  • Rat mal was der Sinn von einem const_iterator ist...



  • Konrad Maurer schrieb:

    dot schrieb:

    Und wo genau liegt jetzt das Problem, geht iter->avail = FALSE; nicht!?

    leider nicht, da bekomme ich immer die Fehlermeldung "expression is not a modified value".... egal was ich avail gebe...

    Hier noch meine beiden Definitions:

    std::vector<NODE_LIST>				m_NodeList; 
    typedef std::vector<NODE_LIST>::const_iterator	itor;
    

    Vielleicht ist hier ein Fehler vorhanden...

    Ding-Dong jetzt ist es mir aufgefallen _const_iterator_

    vielen dank für eure Antworten.

    Könnt ihr mir noc kurz ein Example geben, wie man mit At() arbeitet? Ich möchte ohne der For-Schleife z.B. auf das 2 Elemente im vector zugreifen können etc. um mir die Werte von der struct anschauen zu können.



  • m_NodeList.at(1); //oder
    m_NodeList[1]; //1 ist zweites Element wie bei Arrays!
    

    Edit: Ok habs ^^ at!



  • at(..) nicht At(..)



  • at() ist zu vermeiden, wenn du korrekte Indizes hast. Auch sonst deuten ungültige Indizes meist auf Programmierfehler hin, die Fehlerbehandlung durch Exceptions halte ich daher für fragwürdig.

    Und jede vernünftige Standardbibliothek hat ein assert(index < size) im operator[] der STL-Container, das solltest du im Debug-Modus also unmittelbar merken.


Anmelden zum Antworten