在C++中将整个文件读入std :: string的最佳方法是什么?我想问一个类似的问题,除了我希望我的输出是一个包含文本文件中的行的数组/ STL容器.
C#/ .net有相当有用的File.ReadAllLines()实用程序函数,好的C++(STL)版本会是什么样子?
在C++中,你可以这样做.
将结构定义为:
struct line : std::string
{
friend std::istream & operator >> (std::istream & in, line & ln)
{
return std::getline(in, ln);
}
};
Run Code Online (Sandbox Code Playgroud)然后这样做:
std::ifstream file("file.txt");
std::istream_iterator<line> begin(file), end;
std::vector<std::string> allLines(begin, end);
Run Code Online (Sandbox Code Playgroud)完成!
使用这种方法,您可以直接使用迭代器对begin和end.无需使用std::vector<std::string>.注意line可以隐式转换为std::string.所以,你可以使用begin,并end与标准的算法.
例如,
找到最长的线:
auto cmp = [](line const &a, line const& b) { return a.size() < b.size(); };
std::string longestLine = *std::max_element(begin, end, cmp);
Run Code Online (Sandbox Code Playgroud)计算长度大于的行10:
auto cmp = [](line const &a) { return a.size() > 10 ; };
size_t count = std::count_if(begin, end, cmp);
Run Code Online (Sandbox Code Playgroud)等等.通过这种方式,您可以直接使用begin和工作end.无需使用std::vector.节省内存.
希望有所帮助.
| 归档时间: |
|
| 查看次数: |
172 次 |
| 最近记录: |