从file到stl string读取变量大小的字符数组的基本技巧是什么。目前我的做法是“糟糕”。
在处理数千个大字符数组的应用程序中执行此操作会很慢。我无法预先分配大缓冲区,因为没有设置上限。首先调整字符串的大小并读入它似乎是非标准的。
请注意我们的应用程序有一个自定义文件库,所以我们不能依赖fstream,FILE等。另外,我们使用stl而不是boost。
解决这个问题的最佳技巧是什么?
答案 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以查看更多详情。
编辑:我希望你能理解我,我不会说英语,问候。