Objekt array mit Konstruktor erstellen
-
ich würde gerne ein dynamisches array erstellen, ohne erneut pointer darin zu speichern, also sowas
class A{ int wert public: A(int wert) : wert(wert){} } A* array = new A[anz];das problem an der sache ist, dass es kein standard Konstruktor für A mehr gibt. Kann ich alle As in array mit einem bestimmten Konstruktor initialisieren?
-
template<typename T> class foo { T m_value; public: foo(T const& value) : m_value(value) {} };std::vector< foo<int> > data; data.push_back(foo<int>(10));?
-
Du kannst einen vector verwenden (ist sowieso leichter zu handhaben als nackte Zeiger):
class A{ ... }; std::vector<A> array(anz,A(grundwert));
-
wie löst denn der Vektor das Problem, der ist doch intern auch nichts anderes als ein array? Aber danke erstmal, für die Lösung.
-
Er löst es
(wie, kannst du dir gerne life ansehen - die Header <vector> und <memory> kannst du problemlos öffnen und betrachten) Ich würde mal darauf tippen, daß die Lösung letztendlich auf ein Placement new hinausläuft.
-
sorry, irgendwie ist mir die Klasse Vektor zu unübersichtlich, da blicke ich nicht durch, aber ich habs jetzt mit einem pointer array gelöst. Dachte bisher, es würde sich nur um den header handeln, aber der Vektor wird ja komplett gehohlt.
-
Den Header mußt du dir nur betrachten, wenn du die Funktionsweise von vector<> verstehen willst
Um ihn anwenden zu können, ist das nicht unbedingt notwendig - da reicht die Liste der Methoden (obwohl die auch umfangreich genug ist).(etwas übersichtlicher als im Header wird's in diversen Hilfeseiten, z.B. der MSDN oder www.cppreference.com)
-
Krux schrieb:
sorry, irgendwie ist mir die Klasse Vektor zu unübersichtlich, da blicke ich nicht durch, aber ich habs jetzt mit einem pointer array gelöst. Dachte bisher, es würde sich nur um den header handeln, aber der Vektor wird ja komplett gehohlt.
ich finde code, der mit dynamisch erzeugten arrays auf pointern hantiert, wird viel schneller unübersichtlich, als nen einfacher vector. zumal man nen vector fast genauso wie ein array verwenden kann, allerdings ohne das ganze new hier, new da gesumse.
-
ja nimm nen vector;) auch wenn gewöhnt bits alles selber zu machen, wirst die STL container irgendwan lieben;)