如何连接二维数据数组
How can I concatenate arrays of 2D data
我正在尝试读取二维数据,如下所示:
12345678
abcdefgh
ABCDEFGH
有了我可用的 API,我可以将它读入两部分的一维数组,从中间拆分:
第一个数组:1234abcdABCD
第二个数组:5678efghEFGH
现在我需要合并这些以获得 12345678abcdefghABCDEFGH
。
是否有比 memcpy
和仔细计算更多 sophisticated/stable 的方法?
一系列插入可以完成这项工作。代码可以提取成一个函数,该函数以块数和块大小为参数。
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);
尝试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);
我正在尝试读取二维数据,如下所示:
12345678
abcdefgh
ABCDEFGH
有了我可用的 API,我可以将它读入两部分的一维数组,从中间拆分:
第一个数组:1234abcdABCD
第二个数组:5678efghEFGH
现在我需要合并这些以获得 12345678abcdefghABCDEFGH
。
是否有比 memcpy
和仔细计算更多 sophisticated/stable 的方法?
一系列插入可以完成这项工作。代码可以提取成一个函数,该函数以块数和块大小为参数。
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);
尝试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);