我正在寻找一种将文件中的字符串存储到字符串向量中的快速方法,以便我可以提前保留行数。做这个的最好方式是什么?我应该先继续换行字符还是只获取文件的总大小并保留说大小/ 80,以便粗略估计要保留的内容。理想情况下,我不希望每次都重新分配向量,这对于大文件来说会大大减慢速度。理想情况下,我会提前计算项目数,但我应该通过以二进制模式打开计算新行然后重新打开来做到这一点吗?这似乎很浪费,对此有些想法感到好奇。还有一种方法可以使用 emplace_back 来摆脱下面 getline 代码中的临时 somestring 。查找文本行数的最快方法(C++)
std::vector<std::string> vs;
std::string somestring;
std::ifstream somefile("somefilename");
while (std::getline(somefile, somestring))
vs.push_back(somestring);
我也可以做一些事情来提前获得总大小,我可以直接将这种情况下的 char* 转换为向量吗?这可以追溯到我说 size / 80 或某个常数的储备提示,以便预先为储备提供估计的大小。
#include <iostream>
#include <fstream>
int main () {
char* contents;
std::ifstream istr ("test.txt");
if (istr)
{
std::streambuf * pbuf = istr.rdbuf();
//which I can use as a reserve hint say size / 80
std::streamsize size = pbuf->pubseekoff(0,istr.end);
//maybe I can construct the vector from the char buf directly?
pbuf->pubseekoff(0,istr.beg);
contents = new char [size];
pbuf->sgetn (contents,size);
}
return 0;
}