【问题标题】:How can I concatenate arrays of 2D data如何连接二维数据数组
【发布时间】:2017-10-11 20:00:43
【问题描述】:

我正在尝试读取 2D 数据,如下所示:

12345678
abcdefgh
ABCDEFGH

使用我可用的 API,我可以将它读入一维数组,分成两部分,从中间分开:

第一个数组:1234abcdABCD

第二个数组:5678efghEFGH

现在我需要合并这些以获得12345678abcdefghABCDEFGH

有没有比memcpy 和仔细计数更复杂/稳定的方法?

【问题讨论】:

  • 三胞胎的顺序重要吗? (即像 132acbACB 这样的输出是否可以接受?)

标签: c++ arrays c++98


【解决方案1】:

插入序列可以完成这项工作。可以将代码提取到一个函数中,该函数以多个块和块大小为参数。

std::vector<unsigned char> my_merge(
    const std::vector<unsigned char>& part1,
    const std::vector<unsigned char>& part2,
    const unsigned int chunk_count, 
    const unsigned int chunk_size)
{
    std::vector<unsigned char> merged;
    merged.reserve(part1.size() + part2.size());
    for(unsigned int i = 0; i < chunk_count; ++i)
    {
        merged.insert(
            merged.end(), 
            part1.begin() + i * chunk_size, 
            part1.begin() + (i + 1) * chunk_size);
        merged.insert(
            merged.end(), 
            part2.begin() + i * chunk_size, 
            part2.begin() + (i + 1) * chunk_size);
    }
    return merged;
}

用法:

std::vector<unsigned char> merged = my_merge(part1, part2, 3, 4);

Demo

【讨论】:

    【解决方案2】:

    试试std::copy

    下面的例子(也许你可以通过逻辑循环重写下面的代码)。

    int a[12] = {1,2,3,4,'a','b','c','d','A','B','C','D'};
    int b[12] = {5,6,7,8,'e','f','g','h','E','F','G','H'};
    
    int c[3][8];
    
    //First Row
    std::copy(a, a+4, c[0]);
    std::copy(b, b+4, c[0]+4);
    
    //Second Row
    std::copy(a+4, a+8, c[1]);
    std::copy(b+4, b+8, c[1]+4);
    
    //Third Row
    std::copy(a+8, a+12, c[2]);
    std::copy(b+8, b+12, c[2]+4);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多