小编B. *_*Hel的帖子

多流迭代器c ++

我的程序的目的是打开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).

一开始,我不得不考虑这些解决方案:

  • 如果我看到每列的所有文件,复杂度为O(m*n²),
  • 如果我使用seekg和一组位置并从一个位置跳到另一个位置,则复杂度为O(m n log(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)

c++ stream istream-iterator

14
推荐指数
2
解决办法
366
查看次数

标签 统计

c++ ×1

istream-iterator ×1

stream ×1