-1

将可变大小的字符数组从文件读取到 stl 字符串的基本技术是什么。目前我这样做是“坏”的方式。

  1. 读取写入期间写入的计数
  2. 创建一个该大小加 1 的 char 数组
  3. 将最后一个元素设置为零
  4. 读入缓冲区
  5. 将其分配给字符串
  6. 删除缓冲区

在我处理数千个大型字符数组的应用程序中执行此操作会很慢。我也无法预先分配大缓冲区,因为没有设置上限。首先调整字符串的大小并读入它似乎是不标准的。

请注意,我们的应用程序有一个自定义文件库,所以我们不能依赖 fstream、FILE 等。另外,我们使用 stl 而不是 boost。

解决这个问题的最佳技术是什么?

4

2 回答 2

2

在 C++11 中(实际上,在早期版本中也是如此),您可以读取计数,调整字符串大小,然后直接读入&str[0], str.size(). 这避免了缓冲区的动态分配和额外的副本。

于 2013-07-30T17:53:28.453 回答
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,可以通过 resize 改变字符串的大小

str.resize(i+1);
str[i] = 3;

查看http://en.cppreference.com/w/cpp/string/basic_string以了解更多详细信息。

编辑:我希望你能理解我,我不会说英语,问候。

于 2013-07-30T18:09:02.517 回答