首页 > 后端开发 > C++ > 正文

c++怎么读取未知行数的文件_C++高效读取不定行数文件内容

尼克
发布: 2025-10-13 09:38:01
原创
812人浏览过
使用std::getline配合std::ifstream逐行读取文件,循环在文件末尾自动终止,避免使用eof()判断;示例代码展示打开文件、读入vector并打印;推荐reserve预分配空间和关闭同步提升性能,C++17可用string_view减少拷贝。

c++怎么读取未知行数的文件_c++高效读取不定行数文件内容

在C++中读取未知行数的文件,关键在于使用循环逐行读取,直到文件结束。标准库提供了简单而高效的方式实现这一目标,常用的是 std::ifstream 配合 std::getline 函数。

使用 std::getline 逐行读取

这是最常见也最推荐的方法。无论文件有多少行,都能安全、稳定地读入每一行内容。

  • 打开文件使用 std::ifstream
  • 用 std::getline 一行一行读取字符串
  • 循环自动在文件末尾终止

示例代码:

#include <iostream>
#include <fstream>
#include <string>
#include <vector>

int main() {
    std::ifstream file("data.txt");
    std::string line;
    std::vector<std::string> 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。

小绿鲸英文文献阅读器
小绿鲸英文文献阅读器

英文文献阅读器,专注提高SCI阅读效率

小绿鲸英文文献阅读器 199
查看详情 小绿鲸英文文献阅读器

立即学习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<std::string> lines;
lines.reserve(10000); // 若预估有约1万行
登录后复制
基本上就这些。只要用好 getline 和 ifstream,读取任意行数的文本文件都很轻松,既简洁又高效。

以上就是c++++怎么读取未知行数的文件_C++高效读取不定行数文件内容的详细内容,更多请关注php中文网其它相关文章!

c++速学教程(入门到精通)
c++速学教程(入门到精通)

c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号