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

时间:2013-07-30 17:46:18

标签: c++ string stl

从file到stl string读取变量大小的字符数组的基本技巧是什么。目前我的做法是“糟糕”。

  1. 读取写入期间写入的计数
  2. 创建一个大小为1的字符数组
  3. 将最后一个元素设置为零
  4. 读入缓冲区
  5. 将其分配给字符串
  6. 删除缓冲区
  7. 在处理数千个大字符数组的应用程序中执行此操作会很慢。我无法预先分配大缓冲区,因为没有设置上限。首先调整字符串的大小并读入它似乎是非标准的。

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

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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以查看更多详情。

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