C++ Programmier Interview: Wie wuerdet ihr einen Stack implementieren?
-
fröhlicher wanderer schrieb:
SeppJ schrieb:
Weil das eben kein Implementierungsdetails ist. Das ist die Schnittstelle und der ganze Sinn, warum es überhaupt ein Stack-Template gibt.
Im Gegenteil, es stellt sich die Frage, wozu es einen Adapter braucht, der einheitliche Schnitstellen (push_back, pop_back) in uneinheitliche (push, pop) wrappt und keinerlei Zugriff auf die darunterliegenden, wichtigen, Funktionen erlaubt (wenn man dann notgedrungen wechselt, regt einen dieses pop/push gleich doppelt auf).
std::stack kann man mit std::queue in die Tonne rühren, es würde sie niemand vermissen.
Als ich noch viel in C++ programmierte kam in mir auch öfter das Gefühl auf, dass die stl nur einen ziemlich experimentellen Status hat.
-
Ich programmiere auch C++ nur weil es die ultimative Herausforderung ist. Noch nie war es so schwer, auf so viele Sachen achten zu müssen. Für Kunden würde ich niemals in C++ ein neues Projekt anfangen. Wenn es wirklich mal bei einem Projekt auf extreme Geschwindigkeit ankommen würde, was noch nie bei mir der Fall war, so würde ich eher die Performancekritischen-Teile auslagern.
C++ ist ein nettes Hobby, aber freiwillig sollte man es beruflich nicht mehr verwenden. Ganz einfach deshalb, weil es bessere Werkzeuge gibt. Immer nur das Schweizer-Messer raus holen ist nicht professionell.
-
Da hast Du vollkommen Recht. Die Gui schreibe ich in letzter Zeit in PHP und das OS abstrahiere ich mit JAVA. So habe ich stärkste aus allen Welten.
-
Z schrieb:
Als ich noch viel in C++ programmierte kam in mir auch öfter das Gefühl auf, dass die stl nur einen ziemlich experimentellen Status hat.
Die STL ist, gerade für ihre Zeit, wohl eine der am besten designten Container-Bibliotheken. Die Entkopplung von Containern, Algorithmen und Iteratoren ist bis heute extrem mächtig und nützlich. Bei der Entwicklung der STL wurden extrem viele Punkte berücksichtigt, um möglichst keine Einbussen an Generizität und Performance zu haben. Oft merkt man davon als Anwender nicht viel. Vergleich das z.B. mit den Java-Collections, wo du sehr tiefe Hierarchien hast, Stack von Vector erbt und massiv Code dupliziert wird...
Wenn dich die Hintergründe der STL tatsächlich interessieren, schau vielleicht mal Alexander Stepanovs "Notes On Programming" an.
-
Nexus schrieb:
... Vergleich das z.B. mit den Java-Collections, wo du sehr tiefe Hierarchien hast, Stack von Vector erbt und massiv Code dupliziert wird...
Was bitte ist für dich sehr tief?
-
decimad schrieb:
Da hast Du vollkommen Recht. Die Gui schreibe ich in letzter Zeit in PHP und das OS abstrahiere ich mit JAVA. So habe ich stärkste aus allen Welten.
Ja genau, nur diese beiden Möglichkeiten gibt es. Entweder C++ oder Desktop-Anwendungen in PHP
Obwohl es heute fast mehr Webanwendungen wie Denktopanwendungen gibt, zusätzlich rücken die Apps immer mehr auf. Würde mich nicht wundern wenn in PHP und Java weit mehr Anwendungen geschrieben werden als in C++.
-
Zeus schrieb:
Was bitte ist für dich sehr tief?
"Sehr" ist vielleicht übertrieben, aber der Punkt ist, dass Java-Collections mehrere Vererbungsebenen (durchschnittlich etwa 5) und implementierte Interfaces haben, während die STL-Container ganz ohne Basisklassen auskommen.
Beispiel
Stack<E>
:Basisklassen:
`Vector<E>AbstractList<E>
AbstractCollection<E>
Object`
Implementierte Interfaces:
`SerializableCloneable
Iterable<E>
Collection<E>
List<E>
RandomAccess`
-
asdfsdf schrieb:
Obwohl es heute fast mehr Webanwendungen wie Desktopanwendungen gibt, zusätzlich rücken die Apps immer mehr auf. Würde mich nicht wundern wenn in PHP und Java weit mehr Anwendungen geschrieben werden als in C++.
Das ist doch schon seit längerem so. Allerdings werden große Anwendungen (Browser, Compiler, Interpreter, Textverarbeitungen, große 3d-Spiele) in C++ geschrieben und daran wird sich wohl auch in Zukunft nicht viel ändern, weil man die statische Programmstruktur und Geschwindigkeit braucht.
-
Wirklich grosse Anwendungen werden denke ich kaum welche (ausschliesslich oder grösstenteils) in C++ geschrieben.
Sondern in ABAP, X++ oder ähnlichen Verbrechen an der Menschheit.Ausgenommen vielleicht Betriebssysteme. Wobei da auch ein riesen Teil C ist. (Die Linusche weigert sich ja auch weiterhin hartnäckig gegen C++, weil C++ Programmierer ja alle schlecht sind, *hust*, ja Linusch, wir sind alle schlecht.)
-
hustbaer schrieb:
Wirklich grosse Anwendungen werden denke ich kaum welche (ausschliesslich oder grösstenteils) in C++ geschrieben.
Ah ja, ich denk schon. Open Office ist C++ und ist schon sehr groß. Ich denke, viele CAD Systeme sind in C++ geschrieben (z.B. bei NX geh ich von C++ aus), sowas wie Photoshop, Premiere usw. wahrscheinlich auch. Unsere Software ist C++
Ich glaub jetzt nicht, dass einzelne ABAP Module so wirklich groß sind. Vielleicht die, die direkt von SAP kommen, aber das ist halt die Ausnahme. Sonst stell ich die mir nicht so wahnsinnig groß vor.
-
Ne, die einzelnen Module vermutlich nicht.
Ich dachte da eher an das gesamte SAP Paket
(Und da greift so viel ineinander, dass man das Ding mMn. schon als ein grosses Ganzes betrachten kann bzw. eher fast muss.)
-
Aber dann ist SAP nur ein Programm, auch wenn das jetzt sehr groß ist, würd ich nicht behaupten, dass die meisten großen Programme ABAP sind.
Übrigens, ist kann zwar beides nicht, aber ist X++ nicht doch um einiges "besser" als ABAP? ABAP zieht seit 40 Jahren alle Legacy Features mit, X++ ist relativ modern und die haben versucht, paar interessante Sprachkonstrukte aufzunehmen.
-
Nexus schrieb:
Z schrieb:
Als ich noch viel in C++ programmierte kam in mir auch öfter das Gefühl auf, dass die stl nur einen ziemlich experimentellen Status hat.
Die STL ist, gerade für ihre Zeit, wohl eine der am besten designten Container-Bibliotheken. Die Entkopplung von Containern, Algorithmen und Iteratoren ist bis heute extrem mächtig und nützlich. Bei der Entwicklung der STL wurden extrem viele Punkte berücksichtigt, um möglichst keine Einbussen an Generizität und Performance zu haben. Oft merkt man davon als Anwender nicht viel.
Es mögen ja die Designziele der STL gewesen sein, dass möglichst viele theoretische Informatiker sich vor Ehrfurcht niederwerfen und zu weinen anfangen. Ich war halt nur einfacher Anwender der sich nie großartig um Implementierungsdetails der STL gekümmert hat. Und in einigen Fällen zickte die STL ziemlich rum. Vermutlich hätte man es mit etwas Aufwand irgendwie hinbekommen, aber jedes Mal boten sich Alternativen an, die gleich reibungslos funktionierten, weshalb ich ständig den Eindruck hatte, dass sich die STL in einem frühen Beta-Stadium befindet.
Das ist aber nur mein persönlicher Eindruck. Wenn man auf die STL angewiesen ist und lernt ihre Macken zu umschiffen, lässt sich damit sicherlich einiges anstellen, dass ziemlich nerdish ist.
Ich finde jedoch dass bei Libraries eine intuitive, einfache und sichere Anwendung im Vordergrund stehen sollte. Wenn man erst tagelang testen, lernen und experimentieren muss, um eine bestimmte Library-Funktion in den Griff zu bekommen, kann man sie auch gleich selbst programmieren.
-
Was meinst du konkret? Ich finde die STL relativ intuitiv zu bedienen. Man muss sich aber an die Philosophie gewöhnen, dass nicht jeder Container jede noch so ineffiziente Operation direkt anbietet, und dass für viele Probleme die STL-Algorithmen (statt Memberfunktionen) angeboten werden.
Natürlich kann mans auch übertreiben, ich bin auch kein Fan von
ostream_iterator
oderfor_each()
+ Lambda. Was mich am meisten nervt, ist dass man dauerndbegin()
/end()
-Paare angeben muss... Da gibts wenigstens Ranges als möglichen Ausweg.