STL und Kompatibilität ...



  • Meine Algorithmen werden übersetzt von MatLab in C++. Ich habe C++ neu gelernt und selbstverständlich auch STL. Bei meiner Zusammenarbeit mit anderen Physiker werden diese Algos weitergegeben und auf Linux oder unter Visual Studio 6.0 oder in einer GUI mit QT 4.0 weiterbenutzt.

    Jetzt meine Fragen:

    1. Kennt QT 4.0 die C++ Standard Lybrary??
    2. Wird mein Code kompilierbar unter Linux oder unter Visual Studio 6.0.?
    3. Wird die Implementierung meiner Klassen im alten Code funktionieren?

    Was soll ich beachten? Ich habe keine Ahnung, was ist 'neu' und was ist 'alt' in C++ ist. Ich weiß nur, dass meine Kooperationspartner haben keine Idee, was STL und was Container und Iteratoren sind. Also sie haben in deren Code STL nicht benutzt, aber ich wohl. Werden unsere Programme kompatibel?

    Wäre schade ohne STL programmieren zu müssen, da viele numerische Algorithmen schon fertig programmiert sind.

    Danke für die Antwort!
    Carmen



  • Hallo,

    Die STL (oder richtiger die Standard C++ Library) gehört, wie der Name schon sagt, zum aktuell gültigen Standard und sollte somit bei jedem standardgerechten Compiler dabei sein.
    QT ist ja lediglich eine Bibliothek, die du zusätzlich verwendest.



  • Also: Die STL wird sowohl vom MS-Compiler, als auch vom GNU-C++-Compiler unterstützt. Da die STL Teil des C++-Standards ist, werden dabei wahrscheinlich die wenigsten Probleme auftreten.

    Folgendes ist allerdings zu berücksichtigen:

    Windows und Linux sind zwei unterschiedliche Betriebssysteme. Wenn lediglich Standardfunktionen genutzt werden, ist der Code relativ einfach zu portieren. Sobald jedoch z.B. Datenbanken ins Spiel kommen, werden häufig betriebssystemabhängige Funktionen genutzt.

    Code, der plattformspezifische APIs nutzt, kann nicht mehr einfach auf dem anderen System kompiliert werden, es sei denn, man führt eine Abstraktionsebene ein.

    Qt ist eine solche Abstraktionsebene: Unter beiden OS stehen die gleichen Qt-Funktionen zur Verfügung. Allerdings werden diese von Qt (ohne, daß du damit zu tun hättest) auf die jeweilige Plattform aufgelöst.

    Gruss
    Sid



  • Du meinst die C++ Standard Library, diese wird nur im Volksmund STL genannt. Weil die STL damals in die C++ Standard Library eingeflossen ist. Das erstmal Vorbemerkung, damit es keine Missverständnisse gibt.

    So, C++ ist ein ISO Standard, und auch die C++ Standard Library gehört zum ISO Standard dazu. D.h. deine Programme die die C++ Std Library benutzen, laufen auch auf jedem C++ Compiler-System, das den ISO C++ Standard unterstützt.

    Den ISO Standard unterstützt praktisch jeder aktuelle Compiler, also auch GCC, VC++ 7.1, Intel Compiler 9 usw. Der VC++6 hat auch die STL, aber ist schon sehr alt. Es KANN zu Problemen mit dem VC++6 kommen. Meistens laufen Programme die die STL benutzen ohne Probleme.

    Wenn deine Kollegen z.B. keinen std::vector kennen (was zur C++ Standard Lib gehört) dann sollten die sich so langsam weiter bilden. Denn es ist ein echter ISO Standard der offiziell ist. Gibts sogar als DIN Standard! Darauf fahren die Deutschen ab. 😃

    Also, du kann ohne Bedenken die C++ Standard Lib benutzen.



  • Und solange deine Kollegen mit den Bedingungen zurechtkommen, denen du ihnen vorsetzt (damit meine ich jetzt die Schnittstelle deiner Funktionen nach außen), brauchen sie sich auch keine Sorgen darüber zu machen, womit du intern arbeitest.

    (btw, die STL-Algorithmen arbeiten mit allem zusammen, was nach "Iterator" aussieht 😉 (einschließlich Pointern))



  • Danke... und Wie ist es mit der Optimierung? Ist das war, dass STL hoch- optimiert ist? Ich muss mein Chef Überzeugen, dass STL eleganter und schneller ist. Da ich Physikerin und kein Proggi bin habe ich nur einfache Ideen.(z.B. ein timer einbauen und messen wie lange ein Algo ohne und mit STL dauert)

    Habt Ihr andere ‘Überzeugungsmittel’?



  • du kannst davon ausgehen, dass die stl "optimal" implementiert ist. wenn man also eine datenstruktur braucht, die in der stl bereits vorhanden ist, so kann man diese bedenkenlos nehmen.

    natürlich gibt es immer mal wieder fälle, in denen man mit eigenen varianten besser optimieren kann, aber die sind eher selten und nen fall für die hardcore cracks 😉

    was noch erwähnenswert ist: die verwendung der stl führt erfahrungsgemäß zu weniger bugs und speicherlecks im code.



  • Der C++ Standard gibt für z.B. Container (vector, list usw.) sogar bestimmte Performance-Zeiten vor. Z.B. _muss_ ein std::vector beim lesen _immer_ eine konstante Geschwindigkeit haben.

    Es gibt noch viel mehr Bereiche in der C++ Std Lib, wo der Standard Vorgaben macht, wie sich die Komponenten zu verhalten haben.

    Und meistens sind es optimale Vorgaben. Man muß sich aber immer für jeden Fall die richtige Komponente raussuchen. Dazu sollte man sich Literatur besorgen.



  • Danke! Es ist schwer als nicht Kenner konservative Köpfe zu Überzeugen, dass wir Jahr 2006 haben und wenn etwas Neues beginnt, dann beginnt man nicht mit 1998-Stand zu Programmieren nur weil die meisten STL nicht kennen.

    Ich habe alle Antworten zusammengefasst und warte ich mal ab.

    DANKEhttp://www.c-plusplus.net/forum/images/smiles/smile.gif
    🙂

    Carmen



  • Die STL war auch schon im 1998er Standard dabei.


Log in to reply