Anlegen eines Arrays
-
In meinem C++ Programm erstelle ich eine Klasse mit folgenden Variablen:
int netName; int netDegree; // Number of pins in the net struct pins { int pinname; double x_offset; double y_offset; char pindirection; // I: Input Pin; 0: Output Pin; B: Bidirectional Pin }; pins pin_vector[];Ich weiß aber von vornherein nicht wieviel Elemente das Array "pin_vector" haben wird. Die Anzahl der Elemente steht erst fest, nachdem die Instanz angelegt wurde.
Wie könnte man sowas realisieren?
Wie muss der Konstruktor aussehen wenn beim anlegen einer Instanz dieser Klasse noch nicht feststeht wieviel Elemente dieses Array hat???
-
Schaue dir std::vector<T> an: http://www.cplusplus.com/reference/stl/vector/
Generell lies dir alles auf dieser Seite mal durch.
Edit: Alternativ musst du mit new und delete arbeiten. Aber warum haben wir die STL?
-
Habs überlesen das Anzahl erst nach der Instantiierung feststeht, damit fallen Templates/Konstruktor raus
also definitiv std::vector, wenn das nicht geht .. wieviele Pins sinds denn maximal - ist zwar Verschwendung aber du könntest (zB) 100 per Array Allokieren und der User muss die Maximale Anzahl eingeben, wenn Zugriffe ausserhalb der maximalen Anzahl geschehen werden die untersagt... (igittigit ... nimm std::vector :P)
-
Zwei Beispiele:
struct MyStrukt{...}; class MyClassSTL { public: vector<MyStrukt> vec_Strukt; MyClassSTL() { Mystrukt bla; bla.value... vec_Strukt.push_back(bla); //passt sich selbst der größe an du musst nichts machen } }; //einfach mit STL class MyClassCminusminus { public: Mystrukt *vec_Strukt; MyClassCminusminus() { Mystrukt bla; bla.value... vec_Strukt = new Mystrukt[größe deines Arrays]; //du musst selbst die größe angeben und eventuell auch selbst ändern } ~MyClassCminusminus() { delete[] vec_Strukt; } }; //kompliziert ohne STL
-
Wobei die Klasse
MyClassCminusminusnoch nicht einmal vollständig implementiert ist. Der nicht vorhandene Kopierkonstruktor und Zuweisungsoperator sind eine gefährliche Fehlerquelle.Und jedes Einfügen/Löschen ist unnötig kompliziert und ineffizient. Man muss besonders gut darauf achten, dass alles exceptionsicher ist. Man hat im Debug-Modus keine Index- und Iteratorprüfungen. Überhaupt fehlt einem sehr viele Funktionalität, die man von Hand nachbauen muss. Und die Flexibilität, die Datenstruktur auszuwechseln, hat man auch nicht mit
new[]unddelete[].Kurz: Nur Nachteile ohne STL.
-
Ich hab die Dreierregel der Einfachheit halber unterschlagen, genauso wie eine funktionierende Implementation.
std::vector ist der Weg nach Rom! (Es gibt nur einen lol)
-
HighLigerBiMBam schrieb:
Ich hab die Dreierregel der Einfachheit halber unterschlagen
Ja, aber mit einer einzigen zusätzlichen Zeile im Destruktor kommt das "kompliziert ohne STL" nicht wirklich zur Geltung.

-
HighLigerBiMBam schrieb:
std::vector ist der Weg nach Rom! (Es gibt nur einen lol)
Es gibt mehr

http://www.cplusplus.com/reference/stl/
1. vector Vector (class template)
2. list List (class template)
3. map Map (class template)
4. deque Double ended queue (class template)(ich mag deque nicht :D, und map<int,struct> iss doof
