std::deque<std::string> ...
-
Ich hab da ein kleines Problem. Ich denke mal, dass das Unsinn is:
std::deque<std::string> variable; variable.push_back(„“); std::deque<std::string>::iterator zeiger=variable.begin(); *zeiger=“Hallo Welt“;Die deque kommt nicht damit zurecht, das sich das String ausweitet, weil sie dem Element eine feste Speichergröße zugewiesen hat, um am Ende das nächste Element anzuhängen. D.h wollte ich wie oben das String vergrößern, wird das nächste Element überschreiben, oder angeschrieben, also muss ich entweder im vornherein eine feste Größe zuweisen, oder ich verwende ein c_string. War das so ungefähr richtig schlussgefolgert?
-
Abgesehen davon, daß ein Compiler nicht besonders gut mit typographischen Anführungszeichen zurechtkommt, sollte der Code so eigentlich funktionieren. Die Größe des String's* ist konstant und der Speicher mit den Nutzdaten liegt außerhalb und stört die deque nicht weiter.
*Für den Speicher, den deque anfordert, ist sizeof(T) entscheidend.
Edit: hier hast du den Beweis, daß es funktioniert

-
BigGreenFoot schrieb:
Die deque kommt nicht damit zurecht, das sich das String ausweitet, weil sie dem Element eine feste Speichergröße zugewiesen hat, um am Ende das nächste Element anzuhängen. D.h wollte ich wie oben das String vergrößern, wird das nächste Element überschreiben, oder angeschrieben, also muss ich entweder im vornherein eine feste Größe zuweisen, oder ich verwende ein c_string. War das so ungefähr richtig schlussgefolgert?
Völlig daneben. Ein std::string besteht aus 2 Speicherbereichen: einmal ein Bereich fester Größe, der grundlegende Informationen über den String besitzt, und einmal der Datenbereich. Der Datenbereich wird vom string irgendwo auf dem freien Speicher angelegt und verwaltet. Das, was die deque intern verwaltet, umherkopiert und wofür sie Speicher reservieren muss, ist nur der Info-Bereich, und der ist immer gleich groß.