gpt4 book ai didi

c++ - 在 n 个流中拆分 ifstream?

转载 作者:行者123 更新时间:2023-12-01 14:48:46 24 4
gpt4 key购买 nike

我有一个 ifstream 的问题。我想将 ifstream 分成 n 个部分。

例如 n = 3:

  • Ifstream 包括文件的前 1/3。
  • Ifstream 包括文件的第二个 1/3。
  • Ifstream 包括文件的三分之一。
  •     std::ifstream in("test.txt");
    std::vector<std::string> v1;
    std::vector<std::string> v2;
    std::vector<std::string> v3;

    //first 1/3 of file
    read(in, v1);
    //second 1/3 of file
    read(in, v2);
    //third 1/3 of file
    read(in, v3);

    read(in, v){

    std::string line {""};
    while(getline(in, line)){
    v.pushback(line);
    }
    }

    最佳答案

    您可以读取并推送 vector 中的所有行,然后将 vector 分成 3 部分,例如:

    std::string s;
    while(!in.eof() && getline(in, s)) v1.push_back(s);
    int size = v1.size(), itv2 = 0, itv3 = 0, chunk = v1.size()/3;
    for(unsigned i = size-1; i >= size/3; --i, v1.pop_back())
    (i > chunk*2)? v3[chunk-itv3++] = v1[i] : v2[chunk-itv2++] = v1[i];

    现在,如果您想为 n 个分区执行此操作,您可以执行以下操作:
    //n must be defined before use
    std::vector<std::vector<std::string> > vChunks(n+1);
    std::vector<std::string> v;
    std::string s;
    while(!in.eof() && getline(in, s)) v.push_back(s);
    int size = v.size(), chunk = v.size()/n, r = v.size()%n;
    vChunks[n].resize(r);
    for(int i = 0; i < n; i++)
    vChunks[i].resize(chunk);
    for(int i = v.size()-1, it =1; it <= r; it++, --i, v.pop_back())
    vChunks[n][r-it] = v[i];
    for(int i = v.size()-1; i >= 0; --i, v.pop_back())
    vChunks[(i%chunk == 0)? (i-1)/chunk : i/chunk][i%chunk] = v[i];

    哪里 vChunks前 n 个分区具有 n 维之间的行数,并且在 n + 1 中具有最后几行的其余部分,如果它不能被 n 总行数整除

    关于c++ - 在 n 个流中拆分 ifstream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60114833/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com