首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C++中从文件中读取行的首选模式是什么?

在C++中从文件中读取行的首选模式是什么?
EN

Stack Overflow用户
提问于 2011-08-28 12:36:47
回答 3查看 6.7K关注 0票数 19

我在C++教程中看到过至少两种从文件中读取代码行的方法:

代码语言:javascript
复制
std::ifstream fs("myfile.txt");
if (fs.is_open()) {
  while (fs.good()) {
    std::string line;
    std::getline(fs, line);
    // ...

和:

代码语言:javascript
复制
std::ifstream fs("myfile.txt");
std::string line;
while (std::getline(fs, line)) {
  // ...

当然,我可以添加一些检查,以确保该文件存在并已打开。除了异常处理之外,有没有理由更喜欢更冗长的第一种模式?你们的标准做法是什么?

EN

回答 3

Stack Overflow用户

发布于 2011-08-28 13:39:44

实际上我更喜欢另一种方式。

代码语言:javascript
复制
for (;;)
{
  std::string line;
  if (!getline(myFile, line))
    break;
  ...
}

对我来说,它读起来更好,并且字符串的作用域是正确的(即在使用它的循环内,而不是在循环外)。

但是在你写的两个中,第二个是正确的。

票数 2
EN

Stack Overflow用户

发布于 2011-08-28 12:43:47

第一个在每次循环中释放和重新分配字符串,浪费时间。

第二次将字符串写入已存在的空间,删除释放和重新分配,使其实际上比第一次更快(也更好)。

票数 1
EN

Stack Overflow用户

发布于 2011-08-28 12:43:08

尝试此=>

代码语言:javascript
复制
// reading a text file
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int main () {
  string line;
  ifstream myfile ("example.txt");
  if (myfile.is_open())
  {
    while ( myfile.good() )
    {
      getline (myfile,line);
      cout << line << endl;
    }
    myfile.close();
  }

  else cout << "Unable to open file"; 

  return 0;
}
票数 -5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7219062

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档