使用std::getline配合std::ifstream逐行读取文件,循环在文件末尾自动终止,避免使用eof()判断;示例代码展示打开文件、读入vector并打印;推荐reserve预分配空间和关闭同步提升性能,C++17可用string_view减少拷贝。

在C++中读取未知行数的文件,关键在于使用循环逐行读取,直到文件结束。标准库提供了简单而高效的方式实现这一目标,常用的是 std::ifstream 配合 std::getline 函数。
使用 std::getline 逐行读取
这是最常见也最推荐的方法。无论文件有多少行,都能安全、稳定地读入每一行内容。
打开文件使用 std::ifstream 用 std::getline 一行一行读取字符串 循环自动在文件末尾终止
示例代码:
#include #include #include #include int main() { std::ifstream file("data.txt"); std::string line; std::vector lines; if (!file.is_open()) { std::cerr << "无法打开文件!n"; return -1; } while (std::getline(file, line)) { lines.push_back(line); } file.close(); // 打印所有行(可选) for (const auto& l : lines) { std::cout << l << 'n'; } return 0;}
避免常见误区
有些人尝试用 eof() 控制循环,但容易出错。正确的判断应基于 getline 的返回值,因为它在读取失败或到达文件末尾时返回 false。
立即学习“C++免费学习笔记(深入)”;
不要写 while(!file.eof()),可能导致多处理一次无效数据 getline 本身会返回流对象,用于判断是否成功
提升效率的小技巧
如果文件较大,可以做一些优化来加快读取速度。
预先 reserve vector 空间(若能估计行数) 关闭同步以提升IO性能:std::ios::sync_with_stdio(false); 使用 std::string_view(C++17起)处理只读场景,减少拷贝
例如:
std::ios::sync_with_stdio(false);std::vector lines;lines.reserve(10000); // 若预估有约1万行
基本上就这些。只要用好 getline 和 ifstream,读取任意行数的文本文件都很轻松,既简洁又高效。
以上就是c++++怎么读取未知行数的文件_C++高效读取不定行数文件内容的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1478742.html
微信扫一扫
支付宝扫一扫