如何从类似文件的输入中读取可变大小的字符到stl字符串中



将可变大小的字符数组从文件读取到stl字符串的基本技术是什么。目前我的做法很糟糕。

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

在处理成千上万个大字符数组的应用程序中这样做会很慢。我也不能预先分配大缓冲区,因为没有设置上限。首先调整字符串的大小并读取它似乎是不标准的。

请注意,我们的应用程序有一个自定义的文件库,所以我们不能依赖于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查看更多详细信息。

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

最新更新