Sie optimieren nur die Codelänge oder versuchen, sich hier eine Kopie zu ersparen? Was ist falsch mit dem temporären Puffer?
Ich würde argumentieren, dass Sie tatsächlich den Schutz der Schnur umgehen versuchen, direkt zu versuchen, es so zu tun. Wenn Sie sich Sorgen über die Leistung der Kopie in einer std :: string machen, weil Sie festgestellt haben, dass sie die Leistung Ihrer Anwendung in irgendeiner Weise beeinflusst, würde ich direkt mit dem char * arbeiten.
EDIT:. Doing mehr suchen ... initializing std::string from char* without copy
In der zweiten Antwort, es ist ziemlich flach festgestellt, dass Sie nicht erreichen können, was Sie suchen (dh zu erreichen, füllen Sie eine std :: string ohne eine Wiederholung über den char * zu kopieren.)
Werfen Sie einen Blick auf Ihre Load-Routine (Post es hier vielleicht?) und minimieren Zuweisungen: neu und löschen sind sicherlich nicht frei, so dass Sie zumindest etwas Zeit sparen können, wenn Sie müssen den Puffer nicht ständig neu erstellen. Ich finde es immer hilfreich, es zu löschen, indem ich den Puffer auf 0 oder null setze, um den ersten Index des Arrays bei jeder Iteration zu beenden, aber Sie können diesen Code im Interesse der Leistung schnell entfernen, sobald Sie in Ihrem Algorithmus sicher sind.
Sie gedacht haben, einen 'Vektor' statt 'string' über die Verwendung? Wenn Ihre Daten "roher" als "string-like" sind, kann es für Sie besser funktionieren, und es gibt weniger Verwirrung über direkten Zugriff. (Vektoren müssen zusammenhängend gespeichert werden, verwenden Sie also & v [0] '.) –
In den meisten Fällen handelt es sich um String-Daten, die nur in großen Binärdateien eingebettet sind.Außerdem möchte ich nur die Laderoutinen ändern, nicht die 1000er Codezeilen, die dann die einmal geladenen Daten verwenden, was eine Änderung von std :: string erfordern würde. –
Dann würde ich Ihre spezifische String-Implementierung überprüfen und dann GMans Antwort verwenden, stellen Sie sicher, dass Sie den Stream auch nach 'is.read' überprüfen. –