2016-05-19 7 views
-2

Der folgende Codeausschnitt wurde erstellt, um zu ermitteln, um wie viel mehr Speicherbytes jede Aktion string-append der Zeichenfolge hinzugefügt wird.Die Kapazität einer Zeichenfolge erhöhen

#include <iostream> 
#include <string> 
#include <unordered_map> 
#include <sys/time.h> 
#include <arpa/inet.h> 

using namespace std; 
typedef unsigned short uint16; 
typedef unsigned int uint; 



int main (int argc, char *argv[]) { 
    const char *p = NULL; 
    string s = ""; 
    for (int i=0; i<1050; i++) { 
     s += "a"; 
     if (s.c_str() != p) { 
      printf("%5d\n", i); 
      p = s.c_str(); 
     } 
    } 
    return 0; 
} 

Der Ausgang ist

0 
    1 
    2 
    4 
    8 
    16 
    32 
    64 
    128 
    256 
    512 
1024 

So das Ergebnis ganz klar zeigt es die doppelte Speicher der Zeichenfolge jedes Mal (mindestens).

Die Frage ist, wie Sie den angegebenen Speicherplatz (etwa 2000 Bytes) zu einer vorhandenen Zeichenfolge hinzufügen, so dass man viele Zeichenfolgen anhängen kann, ohne einen freien/malloc auszulösen.

Danke.

+2

[Verwenden Sie 'std :: basic_string :: reserve'] (http://en.cppreference.com/w/cpp/string/basic_string/reserve) – Rakete1111

+0

@ Rakete1111: Verwenden Sie den Antwortabschnitt. –

+0

@LightnessRacesinOrbit ok, ich werde :) – Rakete1111

Antwort

3

Sie können das tun, indem Sie die Elementfunktion reserve() verwenden. Beachten Sie, dass es möglicherweise nicht die genaue Menge an Speicher zuordnen, die Sie verlangen (Sie können mehr bekommen), aber Sie erhalten mindestens, was Sie in einer einzigen Zuweisung fragen.

2

Lesen Sie die Dokumentation!

Dies ist, was std::string::reserve ist für.

+0

Ich gebe dir das und zurückziehen. Wenn der Link nicht mehr verfügbar ist, wird eine einfache Websuche angezeigt. – user4581301

+0

Danke, diese Methode übersehen. Ich wünschte, ich könnte deine Antwort auch akzeptieren. – packetie

Verwandte Themen