关于c ++:什么是最有效的方法来读取每行中的整数文件而不打开它?


What is most efficient way to read a file of integer in each line without opening it?

本问题已经有最佳答案,请猛点这里访问。

在不打开整数文件的情况下,读取每行整数文件的最有效方法是什么?我有一个文件,每行只有整数,即:num.txt

1
2
3
4
100
231
312
...

在我的程序中,我使用while循环来读取它;

1
2
3
4
5
int input = 0;
while(cin >> input)
{        
// Assignment
}

我使用time a.out 在Linux中读取它事实证明,读取1亿个数字大约需要15秒(用户时间)。所以我想知道有没有更好的方法来减少用户时间?

提前谢谢!


1
2
3
4
5
6
7
int input = 0;
ios_base::sync_with_stdio(false);
//Add this statement and see the magic!
while(cin >> input)
{        
// Assignment
}

使之极快(不推荐用于作业!),使用getchar_unlocked()

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int read_int() {
  char c = getchar_unlocked();
  while(c<'0' || c>'9') c = gc();
  int ret = 0;
  while(c>='0' && c<='9') {
    ret = 10 * ret + c - 48;
    c = getchar_unlocked();
  }
  return ret;
}

int input = 0;
while((input = read_int()) != EOF)
{        
// Assignment
}

沃恩·卡托的回答很好地解释了这一点。