Belastbarkeit der String Streams



  • Hi Leute.
    Ich hab da mal so eine Frage.

    1.)
    Hat ein Stringstream (aus <sstream>) eigentlich eine kängen begränzung?
    Falls er lang werden kann wie er will ist das perfekt.
    2.)
    Nimmt er auch Manipulatoren an wie endl?

    3.)
    Wäre er die beste Variante für lange streams?

    Mfg Wikinger75!

    PS: Falls jemand wissen will wie lang, dann so z.b 500 Zeilen text, indem eine Zeile der länge von ca. 15-20 Zeichen entsprechen...



  • er ist nur durch den verfügbaren speicher oder die 32bit grenze beschränkt.
    allerdings könnte er arge langsam werden wenn du zu so vielen zeichen eins
    dranhängen willst (neuallokation)

    jo endl geht



  • Wikinger75 schrieb:

    PS: Falls jemand wissen will wie lang, dann so z.b 500 Zeilen text, indem eine Zeile der länge von ca. 15-20 Zeichen entsprechen...

    Das ist doch Kinderkram, ist ja noch weit von MB oder gar GB entfernt.



  • Wikinger75 schrieb:

    PS: Falls jemand wissen will wie lang, dann so z.b 500 Zeilen text, indem eine Zeile der länge von ca. 15-20 Zeichen entsprechen...

    Lächerlich! das ist doch nichts! Allerdings würde ich std::endl nicht benutzen, da es zum \n zus. einen Flush macht! Ein unnötiges Flush sollte man vermeiden, da es doch an der Performance fressen kann.

    Hier hatte auch mal jemand heraus gefunden, das man die Streams noch buffern kann, dann gibts nochmal nen Performance-Schub.

    Fazit: man kann bedenkenlos Streams nutzen, wenn man weiß, wie man sie behandelt.



  • Aber deine 500 Zeilen a 15 Zeichen sind ein Witz.



  • Brauchst du wirklich einen Stream mit dessen bereitgestellten Operationen? Dein Text klingt eher so, als ob ein String besser geeignet wäre...



  • Stringstreams halten 50 Pfund und mehr aus und sind sehr belastbar.

    kängen begränzung

    Aeh? Vielleicht solltest du erst programmieren, wenn du lesen und schreiben kannst.



  • knivil schrieb:

    kängen begränzung

    Aeh? Vielleicht solltest du erst programmieren, wenn du lesen und schreiben kannst.

    jo mei hat er sich halt verschrieben, mr.perfekt 🙄 👎



  • Zitat:

    kängen begränzung

    Aeh? Vielleicht solltest du erst programmieren, wenn du lesen und schreiben kannst.

    Ja ich meinte "längen Begrenzung"^^

    @thema
    Ja gut dann ist ja alles Perfekt 😃 .
    Wenn die bis zu 50 Pfund mitmachen, dan kann ich da
    noch detalierter Arbeiten, dann wird die noch nen bisjen größer^^

    THX Leuts 😉



  • Da mein Beitrag ignoriert wurde, frage ich nochmals, ob ein String nicht reichen würde, um Text zu speichern? Sind gewisse Operationen wie Ein-/Auslesen erforderlich?



  • Nexus schrieb:

    Da mein Beitrag ignoriert wurde, frage ich nochmals, ob ein String nicht reichen würde, um Text zu speichern? Sind gewisse Operationen wie Ein-/Auslesen erforderlich?

    Der String hilft einem ja schon bei kleinsten Aufgaben nicht. Z.B. wenn ich einen int-Wert in einen String hängen will, kann mir die String-Klasse schon nicht helfen. Also, deine Frage ist doch irgendwie falsch.



  • Nexus schrieb:
    Da mein Beitrag ignoriert wurde, frage ich nochmals, ob ein String nicht reichen würde, um Text zu speichern? Sind gewisse Operationen wie Ein-/Auslesen erforderlich?

    Der String hilft einem ja schon bei kleinsten Aufgaben nicht. Z.B. wenn ich einen int-Wert in einen String hängen will, kann mir die String-Klasse schon nicht helfen. Also, deine Frage ist doch irgendwie falsch.

    Da gebe ich Bulli Recht...


  • Administrator

    So ganz verkehrt ist die Aussage von Nexus übrigens nicht. Ein-/Auslesen könnte ich durchaus auch als "Zahlen zu Text umwandlen" verstehen. Wenn keine solche Umwandlungen oder Formatierungen von nöten sind und man nur Text zusammenbauen möchte, dann ist ein std::string deutlich schneller als ein std::stringstream . Wikinger75 hat bisher immer nur von Text geredet, es kam halt nie irgendetwas, dass er Zahlen umwandelt oder etwas formatiert.

    Grüssli



  • Bulli schrieb:

    Der String hilft einem ja schon bei kleinsten Aufgaben nicht. Z.B. wenn ich einen int-Wert in einen String hängen will, kann mir die String-Klasse schon nicht helfen. Also, deine Frage ist doch irgendwie falsch.

    Ich habe in diesem Thread bisher keinen Hinweis darauf gefunden, dass mehr Funktionalität als das reine Speichern von Text benötigt wäre. Und inwiefern soll (m)eine Frage falsch sein?

    Wikinger75 schrieb:

    Da gebe ich Bulli Recht...

    Du musst halt wissen, ob du diese Aufgaben wirklich brauchst. Denn Streams sind massiv und haben auch gewisse Einschränkungen; zum Beispiel können sie nicht kopiert werden und sind langsamer. Sie können Fehlerstati annehmen, die du auch abfragen musst. Grundsätzlich sind Streams und Strings zwei ganz verschiedene Dinge.



  • Nexus schrieb:

    Ich habe in diesem Thread bisher keinen Hinweis darauf gefunden, dass mehr Funktionalität als das reine Speichern von Text benötigt wäre. Und inwiefern soll (m)eine Frage falsch sein?

    Wikinger75 schrieb:

    2.)
    Nimmt er auch Manipulatoren an wie endl?


  • Administrator

    Bulli schrieb:

    Nexus schrieb:

    Ich habe in diesem Thread bisher keinen Hinweis darauf gefunden, dass mehr Funktionalität als das reine Speichern von Text benötigt wäre. Und inwiefern soll (m)eine Frage falsch sein?

    Wikinger75 schrieb:

    2.)
    Nimmt er auch Manipulatoren an wie endl?

    Und was macht std::endl , was man mit einem std::string nicht machen kann? 🙂

    std::string += '\n';
    // Flush unnötig, da automatisch.
    

    Grüssli



  • Dravere schrieb:

    Bulli schrieb:

    Nexus schrieb:

    Ich habe in diesem Thread bisher keinen Hinweis darauf gefunden, dass mehr Funktionalität als das reine Speichern von Text benötigt wäre. Und inwiefern soll (m)eine Frage falsch sein?

    Wikinger75 schrieb:

    2.)
    Nimmt er auch Manipulatoren an wie endl?

    Und was macht std::endl , was man mit einem std::string nicht machen kann? 🙂

    std::string += '\n';
    // Flush unnötig, da automatisch.
    

    Bitte mal seine Frage genau durchlesen! Er hat gefragt, ob man Manipulatoren wie endl benutzen kann. Hat nicht gefragt, ob man nur endl benutzen kann.
    Oder wie willst du z.B. hex, oct, noshowpoint u.a. wie unter http://www.cplusplus.com/reference/iostream/manipulators/ zu sehen, bei string benutzen? 🙄


  • Administrator

    Bulli schrieb:

    Bitte mal seine Frage genau durchlesen! Er hat gefragt, ob man Manipulatoren wie endl benutzen kann. Hat nicht gefragt, ob man nur endl benutzen kann.
    Oder wie willst du z.B. hex, oct, noshowpoint u.a. wie unter http://www.cplusplus.com/reference/iostream/manipulators/ zu sehen, bei string benutzen? 🙄

    Ich weiss nicht, ich finde hex und oct sind keine Manipulatoren wie endl. Es sind Manipulatoren, aber ihr Zweck ist ein ganz anderer als endl . endl wird sehr häufig für den Zweck missbraucht, einfach eine neue Zeile anzufangen. Daher würde es mich nicht erstaunen, wenn er tatsächlich nur endl benutzen will. Gut, dass ist vielleicht ein wenig Interpretation, aber ich finde es klüger, solche Dinge klarzustellen, als sie einfach totzuschweigen.

    Grüssli



  • endl wird sehr häufig für den Zweck missbraucht, einfach eine neue Zeile anzufangen

    Wenn du zwei Sätze hast, die du in zwei Zeilen ausgeben willst, benutzt du ein '\n' im Ersten?! Sorry, falls ich das aus dem Zusammenhang gerissen hab.


  • Administrator

    moagnus schrieb:

    endl wird sehr häufig für den Zweck missbraucht, einfach eine neue Zeile anzufangen

    Wenn du zwei Sätze hast, die du in zwei Zeilen ausgeben willst, benutzt du ein '\n' im Ersten?! Sorry, falls ich das aus dem Zusammenhang gerissen hab.

    Ich versteh die Frage nicht so recht. Meinst du sowas:

    #include <iostream>
    
    int main()
    {
      std::cout << "Dies ist die erste Zeile!" << '\n'
                << "Dies ist die zweite Zeile!" << std::endl;
    
      return 0;
    }
    

    Ja, das mache ich durchaus. Ich mache auch manchmal sowas, kommt immer auf die Stimmung und Situation an 🙂

    #include <iostream>
    
    int main()
    {
      std::cout << "Dies ist die erste Zeile!\n"
                   "Dies ist die zweite Zeile!" << std::endl;
    
      return 0;
    }
    

    Grüssli



  • Ja, die Frage war so gemeint.
    Und auf std::endl verzichtest du aus Performance-Gründen oder warum? Bin mit dem Flushen immer ganz sorglos umgegangen.


Anmelden zum Antworten