【发布时间】:2019-05-25 11:15:03
【问题描述】:
我正在尝试解决一个学校问题,我做到了,但如果可能的话,它应该运行得更快并且内存更少 - 你能帮我实现吗?
问题说明:从一个文件中读取一个自然数N和一个字符串,在另一个文件中输出相同的字符串N次。
输入文件示例: 3 狗
输出文件示例: 狗 狗 狗
限制: 1 ≤ n ≤ 50,要读取的行的长度最大为1,000,000
时间限制: 0.27 秒
这是我尝试过的(但运行时间超过了限制):
#include<fstream>
using namespace std;
ifstream cin("afisaren.in");
ofstream cout("afisaren.out");
short n;
char s[1000005];
int main() {
cin >> n;
cin >> s;
while(n) {
cout << s << '\n';
n--;
}
cin.close();
cout.close();
return 0;
}
【问题讨论】:
-
cin和cout不是文件流的好名称。它们很容易与std::cin和std::cout混淆,尤其是当您使用邪恶的using namespace std时。 -
您为什么选择
1000005作为char数组的大小?为什么它是一个char数组? -
请注意,
cin >> s会在任何空白处停止。如果您想读取任意字符串(文件末尾或第一个换行符),请使用其他内容。另外,我无法重现您的问题。在我的桌面上(在 x86-64 Arch Linux 上使用g++ -O3编译,与 glibc / libstdc++ 链接)它在 0.029 秒内运行 50 次 ~500kB 输入。我使用(echo '50'; seq 100000 | tr -d '\n' ) > afisaren.in在/tmp(tmpfs ramdisk)中创建输入文件,wc afisaren.*显示1 2 488898 afisaren.in和50 50 24444800 afisaren.out。strace ./a.out显示它使用了 50 倍writev
标签: c++ file memory benchmarking file-read