写下以下代码片段,找出每个字符串附加操作添加到字符串的内存字节数。
#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的情况下执行多个字符串追加。
感谢。
答案 0 :(得分:3)
您可以使用reserve()
成员函数执行此操作。
请注意,它可能无法分配您要求的确切存储量(您可能会获得更多),但您将在一次分配中获得至少您要求的内容。
答案 1 :(得分:2)
阅读文档!
这是std::string::reserve
的用途。