0
如果緩衝區大小小於文件大小,如何合併兩個文件? 例如,我有兩個文件與排序整數如果緩衝區大小小於文件大小,如何合併兩個文件?
的1.txt和2.txt
我有一個排序的文件進行合併他們,但我無法讀取從每超過兩個號碼文件(這是任務)。我無法同時在內存中存儲超過4個數字。
這裏是我的代碼
#include <iostream>
#include <fstream>
#include <vector>
#include <iterator>
#include <algorithm>
using namespace std;
const int bufferSize = 2;
bool readSortFile(ifstream &file, vector<int> &data) {
int tmp;
for (int i = 0; (i < bufferSize && file >> tmp); i++)
data.push_back(tmp);
return file.good();
}
int main() {
ifstream file1("1.txt");
ifstream file2("2.txt");
ofstream out;
vector<int> data1, data2;
bool fileGood1, fileGood2;
fileGood1 = true;
fileGood2 = true;
while(fileGood1 || fileGood2) {
if(data1.size() == 0)
fileGood1 = readSortFile(file1, data1);
if (data2.size() == 0)
fileGood2 = readSortFile(file2, data2);
out.open("temp", ios::app);
merge(data1.begin(),
data1.end(),
data2.begin(),
data2.end(),
ostream_iterator<int>(out, "\n"));
data1.clear();
data2.clear();
out.close();
}
rename("temp", "result.txt");
file1.close();
file2.close();
return 0;
}
輸出爲1 2 5 7 6 7 8 9
你看過外部排序:http://en.wikipedia.org/wiki/External_sorting? – NathanOliver 2015-04-01 19:47:46
你是否嘗試過實施'合併'?該算法不要求將源保存在內存中,事實上它只能對每個序列的一個值進行操作......或者,您可以直接在輸入中使用算法,方法是使用'std :: istream_iterator'和'std :: ostream_iterator' ...只是說 – 2015-04-01 19:53:48
輸入文件是否應該已經排序? – Christophe 2015-04-01 19:54:19