我的程序的目的是打开m行相同长度的文本文件n,逐列读取文件并打印每列.
例如,对于此文本文件
abcd
efgh
jklm
Run Code Online (Sandbox Code Playgroud)
我想打印
a e j
b f k
c g l
d h m
Run Code Online (Sandbox Code Playgroud)
由于一个行长度可以是200 000 000并且列长度可以超过10000,我无法在矩阵中打开内存中的所有文件.
从理论上讲,我希望有一个程序在空间中使用O(m)并在时间上使用O(m*n).
一开始,我不得不考虑这些解决方案:
最后一点,对于某些服务器问题,我只需要使用STL.
我的最后一个想法是创建一个文件的迭代器数组,并在每行的开头初始化这些迭代器.之后,要查看下一列,我只需要增加每个迭代器.这是我的代码
ifstream str2;
str2.open ("Input/test.data", ifstream::in);
int nbline = 3;
int nbcolumn = 4;
int x = 0;
istreambuf_iterator<char> istart (str2);
istreambuf_iterator<char> iend ;
istreambuf_iterator<char>* iarray;
iarray = new istreambuf_iterator<char>[nbline];
while (istart != iend){
if (x % nbcolumn == 0){
iarray[x/nbcolumn] = istart;
}
istart++;
x++;
}
for …Run Code Online (Sandbox Code Playgroud)