Iteratoren-Problem

Barade

Barade

Kellerkind
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.
 
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;
        }
}
 
Zuletzt bearbeitet:
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.
 
Zuletzt bearbeitet:
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
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;
}
Ist das ++ als Präfix eigentlich schneller als als Postfix?
Ja.
 
-.- Ich hab vergessen den *-Operator bei den Zugriffen auf die Eigenschaften des "Property"-Vektors zu entfernen.
Vielen Dank für deine schnelle Hilfe.
 

Ähnliche Themen

objekt-katalog

c++ syntax: iterator fuer struct in template Klasse

C Programm unter Unix

Xubuntu - AVR32-linux crosscompile sqlite

problem

Zurück
Oben