增加字符串的容量

时间:2016-05-19 17:13:16

标签: c++

写下以下代码片段,找出每个字符串附加操作添加到字符串的内存字节数。

#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;
}

输出

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

因此结果非常清楚地表明每次(至少)它会使字符串的存储量翻倍。

问题是,如何在现有字符串中添加使用指定空间(例如,2000字节),以便可以在不触发free / malloc的情况下执行多个字符串追加。

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用reserve()成员函数执行此操作。 请注意,它可能无法分配您要求的确切存储量(您可能会获得更多),但您将在一次分配中获得至少您要求的内容。

答案 1 :(得分:2)

阅读文档!

这是std::string::reserve的用途。