Iteratoren-Problem

Dieses Thema im Forum "C/C++" wurde erstellt von Barade, 16.02.2008.

  1. Barade

    Barade Kellerkind

    Dabei seit:
    14.12.2007
    Beiträge:
    24
    Zustimmungen:
    0
    Hallo,
    ich hab vor einiger Zeit angefangen mein erstes C++-Buch zu lesen und bin jetzt auch schon beim zweiten. Da man aber bekanntlich am besten durch Anwendung lernt, hab ich auch schon meine ersten Versuche hinter mir. Jetzt hab ich aber ein kleines Problem mit Iteratoren.
    Ich habe eine kleine Funktion geschrieben, die mir die Elemente eines Vektors initialisiert:
    Code:
    void InitObjectProperty(std::vector<int>* Property, int Value)
    {
    	for (std::vector<int>::iterator Iterator = *Property.begin(); Iterator != *Property.end(); Iterator++)
    	{
    		*Iterator = Value;
    	}
    }
    
    Dazu hätte ich jetzt zwei Fragen:
    1. Warum geht das nicht, bzw. warum bekommt man einen Fehler vom Compiler?
    2. Ist das überhaupt der beste bzw. ein richtiger Lösungsansatz? Ich wollte es erst über die for_each-Funktion versuchen, hab das aber nicht so richtig hinbekommen.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 mapiox, 16.02.2008
    Zuletzt bearbeitet: 16.02.2008
    mapiox

    mapiox Tripel-As

    Dabei seit:
    21.04.2002
    Beiträge:
    176
    Zustimmungen:
    0
    Hallo

    zum Initialisieren:
    Code:
     std::vector<int> vec(10,4);
    
    Erzeugt einen vector mit 10 Elementen mit dem Wert 4

    ansonsten sollte dies funktionieren:
    Code:
    void InitObjectProperty(std::vector<int>* Property, int Value)
    {
            std::vector<int>::iterator end = Property->end();
    
            for(std::vector<int>::iterator Iterator = Property->begin(); Iterator < end; ++Iterator)
            {
                    *Iterator = Value;
            }
    }
    
     
  4. #3 Barade, 16.02.2008
    Zuletzt bearbeitet: 16.02.2008
    Barade

    Barade Kellerkind

    Dabei seit:
    14.12.2007
    Beiträge:
    24
    Zustimmungen:
    0
    Danke für die Hilfe, werds gleich mal ausprobieren.
    Zum ersten Beispiel: Da hab ich wohl im Buch nicht genau aufgepasst, ich wusste nur noch, dass man die Größe initalisieren kann. Ich werde aber wohl zweiteres verwenden, da die Größe zur Erzeugung noch nicht bekannt ist.
    Finde ich etwas umständlich zwei Iteratoren verwenden zu müssen, ist aber auch nicht die halbe Welt.
    edit:
    Ich hab immernoch zwei Syntaxfehler:
    error: conversion from 'int' to non-scalar type '__gnu_cxx::__normal_iterator<int*, std::vector<int, std::allocator<int> > >' requested

    Ist das ++ als Präfix eigentlich schneller als als Postfix?
    Hab mal irgendwo gelesen, dass das Präfix += entspricht oder so.
     
  5. mapiox

    mapiox Tripel-As

    Dabei seit:
    21.04.2002
    Beiträge:
    176
    Zustimmungen:
    0
    Hier ein kleines Beispiel, meldet bei mir keinen Fehler:
    Code:
    #include <vector>
    #include <iostream>
    
    using namespace std;
    
    void InitObjectProperty(std::vector<int>* Property, int Value)
    {
        std::vector<int>::iterator end = Property->end();
    
        for(std::vector<int>::iterator Iterator = Property->begin(); Iterator < end; ++Iterator)
        {
           *Iterator = Value;
        }
    }
    
    
    int main()
    {
    
       std::vector<int> vec(10,4);
    
       std::vector<int>::iterator Iterator = vec.begin();
       std::vector<int>::iterator end = vec.end();
    
       for(Iterator; Iterator < end; ++Iterator)
       {
           std::cout << *Iterator;
       }
       cout << endl;
    
       std::vector<int> *pvec = &vec;
    
       InitObjectProperty(pvec, 7);
    
       Iterator = vec.begin();
       end = vec.end();
    
       for(Iterator; Iterator < end; ++Iterator)
       {
           std::cout << *Iterator;
       }
       cout << endl;
    }
    
    Ja.
     
  6. Barade

    Barade Kellerkind

    Dabei seit:
    14.12.2007
    Beiträge:
    24
    Zustimmungen:
    0
    -.- Ich hab vergessen den *-Operator bei den Zugriffen auf die Eigenschaften des "Property"-Vektors zu entfernen.
    Vielen Dank für deine schnelle Hilfe.
     
  7. #6 Hello World, 08.03.2008
    Hello World

    Hello World Routinier

    Dabei seit:
    22.11.2006
    Beiträge:
    324
    Zustimmungen:
    0
    Blödsinn, bei jedem heutigen Compiler ist das völlig Banane.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Iteratoren-Problem