将可变大小的字符数组从文件读取到stl字符串的基本技术是什么。目前我的做法很糟糕。
- 读取写入期间写入的计数
- 创建一个大小加1的char数组
- 将最后一个元素设置为零
- 读入缓冲区
- 将其分配给字符串
- 删除缓冲区
在处理成千上万个大字符数组的应用程序中这样做会很慢。我也不能预先分配大缓冲区,因为没有设置上限。首先调整字符串的大小并读取它似乎是不标准的。
请注意,我们的应用程序有一个自定义的文件库,所以我们不能依赖于fstream、file等。此外,我们使用stl而不是boost。
解决这个问题的最佳技术是什么?
在C++11中(在实践中,在早期版本中也是如此)可以读取计数,调整字符串大小,然后直接读取转换为CCD_ 1。这避免了动态分配缓冲区的大小以及额外的副本。
如果你知道字符串的大小,那么你可以这样做。
std::string str;
str.reserve( FILE_SIZE ); //if FILE_SIZE > str.size() then it allocates at least FILE_SIZE
//you can query the capacity of you string calling
std::cout << "Capacity: " << str.capacity();
最后,您有几种方法可以修改字符串,如push_back、resize等。
如果你写一些类似的东西
str[i] = 3;
确保字符串的大小至少为i+1,您可以通过调整的大小来更改字符串的大小
str.resize(i+1);
str[i] = 3;
看看http://en.cppreference.com/w/cpp/string/basic_string查看更多详细信息。
编辑:我希望你能理解我,我不会说英语,问候。