Pointer auf das erste Element eines vectors zurück geben
Pointer auf das erste Element eines vectors zurück geben
Hallo Leute,
Angenommen ihr habt eine Klasse die Messwerte verarbeitet, diese Klasse besitzt eine Membervariable in Form eines vectors vom Typ double, in dem die Messwerte nach der Verarbeitung gespeichert werden nennen wir diese Membervariable einfach mal values.
Nach der Verarbeitung der Messwerte sollen diese ausgegeben werden.
Jetzt habe ich mir folgendes überlegt, Klar könnte ich es mir einfach machen und z.b. eine Methode nennen wir sie "getValues" schreiben, die den vector values über eine for schleife durchläuft und mir jeden einzelnen Messwert über cout auf der Konsole ausgibt. Nachteil die Klasse ist nicht so abstrakt, ich bin an cout gebunden.
Ich schreibe Software lieber so universell wie möglich.
Ist es auch möglich beim aufruf von getValues an den Aufrufer einfach nur einen Pointer auf das erste Element des vectors values zurück zu geben ? Durch diesen Pointer hat der Aufrufer dann das erste Element und kann in einer for Schleife dann so lange die Adresse inkrementieren, bis er das Ende des vectors values erreicht hat.
Wäre das so okay oder löst man so etwas anderst ?
Angenommen ihr habt eine Klasse die Messwerte verarbeitet, diese Klasse besitzt eine Membervariable in Form eines vectors vom Typ double, in dem die Messwerte nach der Verarbeitung gespeichert werden nennen wir diese Membervariable einfach mal values.
Nach der Verarbeitung der Messwerte sollen diese ausgegeben werden.
Jetzt habe ich mir folgendes überlegt, Klar könnte ich es mir einfach machen und z.b. eine Methode nennen wir sie "getValues" schreiben, die den vector values über eine for schleife durchläuft und mir jeden einzelnen Messwert über cout auf der Konsole ausgibt. Nachteil die Klasse ist nicht so abstrakt, ich bin an cout gebunden.
Ich schreibe Software lieber so universell wie möglich.
Ist es auch möglich beim aufruf von getValues an den Aufrufer einfach nur einen Pointer auf das erste Element des vectors values zurück zu geben ? Durch diesen Pointer hat der Aufrufer dann das erste Element und kann in einer for Schleife dann so lange die Adresse inkrementieren, bis er das Ende des vectors values erreicht hat.
Wäre das so okay oder löst man so etwas anderst ?
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Pointer auf das erste Element eines vectors zurück geben
Ja, das ist möglich und führt vermutlich direkt ins Desaster. Anders ausgedrückt: Lass das!gizno82 hat geschrieben:Ist es auch möglich beim aufruf von getValues an den Aufrufer einfach nur einen Pointer auf das erste Element des vectors values zurück zu geben ? Durch diesen Pointer hat der Aufrufer dann das erste Element und kann in einer for Schleife dann so lange die Adresse inkrementieren, bis er das Ende des vectors values erreicht hat.
In der STL gibt es sogenante Iteratoren dafür.
Übergib eine konstante Referenz auf den Vector.
Code: Alles auswählen
std::vector<double> const & getValues()
{
return Values;
}
Code: Alles auswählen
std::vector<double> const & v = werte.getValues();
for( std::vector<double>::const_iterator it = v.begin(); it != v.end(); it++ )
{
cout << "Wert ist: " << *it;
}
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Pointer auf das erste Element eines vectors zurück geben
Danke Xin
Grüße Gizno
Grüße Gizno
Re: Pointer auf das erste Element eines vectors zurück geben
Angenommen meine Klasse heißt measurement
was wäre dann der Rückgabetyp der Methode getValue, wenn ich die Klassendeklaration in einer Header Datei vornehme und Die Implementierung in einer .cpp source Datei ?
Wenn eine Methode z.B einen Integer zurück gibt ist mir das klar, dann sieht das so aus:
int Klassenname::Methodenname()
{
...
}
wie sieht jetzt der Funktionskopf meiner getValues Methode aus die ja eine konstante Referenz auf den Vektor zurück gibt ?
etwa so ?
was wäre dann der Rückgabetyp der Methode getValue, wenn ich die Klassendeklaration in einer Header Datei vornehme und Die Implementierung in einer .cpp source Datei ?
Wenn eine Methode z.B einen Integer zurück gibt ist mir das klar, dann sieht das so aus:
int Klassenname::Methodenname()
{
...
}
wie sieht jetzt der Funktionskopf meiner getValues Methode aus die ja eine konstante Referenz auf den Vektor zurück gibt ?
etwa so ?
Code: Alles auswählen
std::vector<double> const & measurement::getValues()
{
//...
}
@Xin wieso muss die referenz eigentlich konstant sein, was steckt dahinter ?
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Pointer auf das erste Element eines vectors zurück geben
Yepp, genau so.gizno82 hat geschrieben:wie sieht jetzt der Funktionskopf meiner getValues Methode aus die ja eine konstante Referenz auf den Vektor zurück gibt ?
etwa so ?
Code: Alles auswählen
std::vector<double> const & measurement::getValues() { //... }
Noch besser wäre:
Code: Alles auswählen
std::vector<double> const & measurement::getValues() const // <- hier kommt noch ein const hinter
{
//...
}
Damit Du die Änderungen der Daten durch die Klasse vornehmen musst und nicht jeder, der mal eben getValues() aufruft, diese auch ändert darf.gizno82 hat geschrieben:@Xin wieso muss die referenz eigentlich konstant sein, was steckt dahinter ?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Pointer auf das erste Element eines vectors zurück geben
Danke Xin,
Super das es Proggen.org gibt, hier bekommt man Hilfestellung von kompetenten Programmierern und wird nicht gleich mit dummen Kommentaren von inkompetenten leuten runter gemacht wie das bei manchen Foren der Fall ist.
Danke
Super das es Proggen.org gibt, hier bekommt man Hilfestellung von kompetenten Programmierern und wird nicht gleich mit dummen Kommentaren von inkompetenten leuten runter gemacht wie das bei manchen Foren der Fall ist.
Danke
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Pointer auf das erste Element eines vectors zurück geben
Wenn Du ein kompetenter Programmierer bist, nicht einfach abhauen, sondern mithelfen. ^^gizno82 hat geschrieben:Super das es Proggen.org gibt, hier bekommt man Hilfestellung von kompetenten Programmierern und wird nicht gleich mit dummen Kommentaren von inkompetenten leuten runter gemacht wie das bei manchen Foren der Fall ist.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Pointer auf das erste Element eines vectors zurück geben
Noch mal eine Sache, 
Wie muss ich vorgehen, wenn ich meinen Vektor Dynamisch erzeugen möchte.
Sprich Den Benutzer fragen wie viele Messwerte er erfassen möchte die Eingabe in einer Integer Variable speichern,
Diese Variable dann beim Instanzieren der cMeasurement Klasse dem Konstruktor als Größenangabe für den Vektor values übergeben.
Hier mal meine Klassendeklaration:
Hier meine Implementierung:
Muss ich nicht den Vektor values im Konstruktor erzeugen, weil die größe des Vektors values beim Konstruktoraufruf übergeben wird oder passt alles in der jetzigen Form ?

Wie muss ich vorgehen, wenn ich meinen Vektor Dynamisch erzeugen möchte.
Sprich Den Benutzer fragen wie viele Messwerte er erfassen möchte die Eingabe in einer Integer Variable speichern,
Diese Variable dann beim Instanzieren der cMeasurement Klasse dem Konstruktor als Größenangabe für den Vektor values übergeben.
Hier mal meine Klassendeklaration:
Code: Alles auswählen
#ifndef CBRIDGE_H_
#define CBRIDGE_H_
#include <vector>
using namespace std;
class cMeasurement
{
private:
vector<double> values;
public:
vector<double> const & getStabLenght(void) const;
cBridge(void): valuest(int numberOfValues); //Hier wird die größe des Vektor an den übergeben
~cBridge(void);
};
Code: Alles auswählen
#include "cMeasurement.h"
using namespace std;
vector<double> const & cMeasurement::getValues(void) const;
{
return values;
}
cMeasurement::cMeasurement(void): values(int numberOfValues);
{
}
~cMeasurement::cMeasurement(void)
{
}
Re: Pointer auf das erste Element eines vectors zurück geben
Hab auch nicht vor hier Wissen abzuschöpfen und dann nen Abgang zu machen. Ich würde auch mal gerne ein Tutorial schreiben, das andere weiter bringt, leider sind meine Kenntnisse was c++ angeht noch nicht sehr weit reichend wie Du siehst.Xin hat geschrieben:Wenn Du ein kompetenter Programmierer bist, nicht einfach abhauen, sondern mithelfen. ^^gizno82 hat geschrieben:Super das es Proggen.org gibt, hier bekommt man Hilfestellung von kompetenten Programmierern und wird nicht gleich mit dummen Kommentaren von inkompetenten leuten runter gemacht wie das bei manchen Foren der Fall ist.
Ich komme aus dem c bereich, hab Mikrocontroller in c programmiert.
Über Mikrocontrollerprogrammierung könnte ich ein Tutorial machen.
- Xin
- nur zu Besuch hier
- Beiträge: 8862
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Pointer auf das erste Element eines vectors zurück geben
Ein Vector ist dynamisch. Je mehr Messwerte Du speicherst, desto größer wird er.gizno82 hat geschrieben:Wie muss ich vorgehen, wenn ich meinen Vektor Dynamisch erzeugen möchte.
Ich denke das passt so, müsste ich aber selbst jetzt nachsehen.gizno82 hat geschrieben:Sprich Den Benutzer fragen wie viele Messwerte er erfassen möchte die Eingabe in einer Integer Variable speichern,
Diese Variable dann beim Instanzieren der cMeasurement Klasse dem Konstruktor als Größenangabe für den Vektor values übergeben.
Hier mal meine Klassendeklaration:[/quote]
Never ever using <class> oder using namespace in einer Headerdatei. Never!
Compilieren wird das nicht, aber das wird Dir der Compiler schon sagen.
Du initialisiert den Vektor in der Initialisierungliste, die wird vor dem Konstruktor ausgeführt. Das ist a) der richtige und b) der beste Ort, um irgendwas zu initialisieren.gizno82 hat geschrieben:Muss ich nicht den Vektor values im Konstruktor erzeugen, weil die größe des Vektors values beim Konstruktoraufruf übergeben wird oder passt alles in der jetzigen Form ?
Keiner verlangt, dass Du gleich ein Tutorial schreibst, insbesondere dann nicht, wenn Du Dir mit den Informationen nicht sicher bist.gizno82 hat geschrieben:Hab auch nicht vor hier Wissen abzuschöpfen und dann nen Abgang zu machen. Ich würde auch mal gerne ein Tutorial schreiben, das andere weiter bringt, leider sind meine Kenntnisse was c++ angeht noch nicht sehr weit reichend wie Du siehst.
Ich komme aus dem c bereich, hab Mikrocontroller in c programmiert.
Über Mikrocontrollerprogrammierung könnte ich ein Tutorial machen.
Mit Microcontrollerprogrammierung kannst Du Dich vermutlich mit cloidnerux zusammensetzen.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.