fstream
是建立在 iostream
上來實作的
所以所有 iostream
的操作都可以在 fstream
上使用
舉例
ifstream fin("in.txt");
ofstream fout("out.txt");
string str;
while(fin >> str)
fout << "hello, " << str << endl;
由此可以知道 ifstream
是讀入,ofstream
是輸出
雖然 fstream
有自己的讀寫函數
但是 operator<<
、oeprator>>
太好用了
然後其實 fstream
只要是"文字檔"都可以開
以下為合法操作
ofstream cpp("C++.cpp");
ofstream py("Python.py");
cpp << "#include<iostream>\nusing namespace std;\n";
py << "import sys\nimport path";
另外還可以開二進位檔
不過出題用不到,所以我不會
然後要注意雖然 fstream
的destructor
有關閉並處存檔案
但是還是要記得用 .close()
養成習慣在檔案用不到時關閉
可以避免檔案開起衝突
最後通常因為看這個是為了出題
所以我也放上出題的模板
#pragma GCC optimize("O2")
#include <bits/stdc++.h>
#define f first
#define s second
#define pii pair<int, int>
using namespace std;
const string id = "a001"; // problem id
vector<int> num{100, 10000, 1000000}; // number of test data
vector<pii> range{{100, 1000}, {10000, 100000}, {100000, 1000000}}; // range: [l, r]
fstream fin, fout;
string fn(int x) {
return string{char('0' + x / 10), char('0' + x % 10)};
}
int solve(int x) {
/* code here to solve */
/* return solution */
/* or just use "fout << ans" */
}
int main() {
srand(time(0));
mt19937 gen(rand());
for (int i = 0; i < num.size(); i++) {
uniform_int_distribution<int> dis(range[i].f, range[i].s);
fin.open(id + "_" + fn(i) + ".in", ios::out);
fout.open(id + "_" + fn(i) + ".out", ios::out);
/* ---------- data ----------*/
for (int j = 0; j < num[i]; j++) {
/* input, output data
e.g.
auto rd = dis(gen);
fin << rd << '\n';
fout << solve(rd) << '\n';
*/
}
fin.close();
fout.close();
}
return 0;
}
revcoding