Anfängerfrage: Wie am besten Vector zurückgeben
-
Guten morgen,
ich habe eine Klasse
class MyClass { private: std::vector<SomeClass> vClasses; ... ... ... public: ... ... ... }der vector wir innerhalb der Klasse automatisch gefüllt. Ich möchte nur das der Vecotr von außen abgerufen weden soll. Hierzu wollte ich einen Getter schreiben.
Allerdings muss dann ja hierzu jedesmal der Vector kopiert werden. Wie gebe ich die Daten am besten nach außen? Per Referenz?LG
-
Wenn du nur Schreibzugriff benötigst kannst du eine const Reference zurückgeben.
-
David_pb schrieb:
Wenn du nur Schreibzugriff benötigst kannst du eine const Reference zurückgeben.
ich brauche nur lesezugriff. Der Vector darf von ausem NICHT verändert werden
-
Du musst in dem Getter ja nicht den ganzen Vektor zurückgeben.
Es reicht einen Index als Parameter zu übergeben, der direkt das damit angesprochene Element im Vektor zurückgibt.
Dafür solltest du natürlich abfangen ob der übergebene Index kleiner ist als die Anzahl der Elemente im Container
-
n000bie schrieb:
David_pb schrieb:
Wenn du nur Schreibzugriff benötigst kannst du eine const Reference zurückgeben.
ich brauche nur lesezugriff. Der Vector darf von ausem NICHT verändert werden
Ich glaub er meinte auch Lesezugriff. const Referenz bedeutet dass kein Schreiben möglich ist.
-
Ich würde mir zuerst überlegen, welche Daten von aussen überhaupt benötigt werden. Je nachdem ist es nämlich besser, nicht den ganzen Container bekannt zu geben (z.B. kann man auf diese Weise auch vom konkreten Containertyp abstrahieren).
Ich habe mal ein Thema eröffnet, das in diese Richtung geht (dort wurde lediglich die Funktionalität des Iterierens benötigt).
-
pumuckl schrieb:
n000bie schrieb:
David_pb schrieb:
Wenn du nur Schreibzugriff benötigst kannst du eine const Reference zurückgeben.
ich brauche nur lesezugriff. Der Vector darf von ausem NICHT verändert werden
Ich glaub er meinte auch Lesezugriff. const Referenz bedeutet dass kein Schreiben möglich ist.
Ups, ja meinte ich!

-
zb.
class MyClass { public: typedef std::vector<SomeClass> Container; typedef Container::const_iterator const_iterator; const_iterator begin() const { return vClasses.begin(); } const_iterator end() const { return vClasses.end(); } private: Container vClasses; }; template<typename Iter> void f(Iter first, Iter last) { // bogus } int main() { MyClass M; f(M.begin(), M.end()); return 0; }