2017-10-11 47 views
1

我試圖讀取二維數據如下所示:我怎麼可以連接2D數據陣列

12345678 
abcdefgh 
ABCDEFGH 

隨着提供給我的API,我可以讀入一維數組兩個部分,拆了下來中部:

第一陣列:1234abcdABCD

二陣:5678efghEFGH

現在我需要合併這些獲得12345678abcdefghABCDEFGH

有沒有比memcpy更精密/穩定的做法,並仔細計算?

+0

三胞胎的順序是否重要? (比如說132acbACB會是一個可接受的輸出嗎?) – Knoep

回答

3

插入序列可以完成這項工作。代碼可以被提取到一個函數中,該函數將大量塊和塊大小作爲參數。

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

1

嘗試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);