合并3组阵列
Merging 3 sets of arrays
我被认为是C 的新事物,并且我对合并三组数组的疑问。例如:
x = 2,3,1,4,5
y = 1,3,5,7,9
z = 3,5,4,6,1
我想将它们合并为:
w = 2,1,3,3,3,5,1,5,4,4,7,6,5,9,1
我一直在通过Google进行搜索。但是,我得到的是如何合并数组并将它们放入上升订单。
我实际需要的:
1st from x, 1st from y, 1st from z, 2nd from x, 2nd from y, 2nd from z ............ 5th from z
非常感谢!
这只是用i
从0
到4
的循环的问题,然后将每个i
映射到数组w
的相应元素。
这是算法的骨架:
std::array<int, 5> x, y, z;
std::array<int, 15> w;
for (int i = 0; i < 5; i++) {
w[i*3] = x[i];
w[i*3+1] = y[i];
w[i*3+2] = z[i];
}
这是工作示例。
如果您使用的是std::vector
,则该算法会变得更棘手。例如,您需要使用std::max
来找到最大尺寸,并根据该值执行循环。然后,每当矢量为空时,您都需要跳过它。这再次是骨骼:
std::vector<int> x, y, z;
std::vector<int> w;
std::size_t max = std::max({x.size(), y.size(), z.size()});
for (std::size_t i = 0; i < max; i++) {
if (x.size() > i) w.push_back(x[i]);
if (y.size() > i) w.push_back(y[i]);
if (z.size() > i) w.push_back(z[i]);
}
只要您知道x,y,z和w的大小,这是一个相当简单的解决方案。
在C 中,与其他高级编程语言不同,大多数基于数组的操作都不由特殊功能来处理。相反,用户必须编写一个循环以自己执行此任务。
在您的情况下,假设 x,y,z和w均被正确地声明和定义,最直接的方法可能是使用for loop,如下:
int i;
for(i=0; i<(size_of_x); i++){
w[i*3] = x[i];
w[i*3+1] = y[i];
w[i*3+2] = z[i];
}
请注意,将需要定义变量size_of_x
才能工作。
您可能还需要考虑以下事实:阵列的长度可能有所不同。
int *resArray;
int totalLength = sizeof(x) + sizeof(y) + sizeof(z);
int maxLength = max(sizeof(x), max(sizeof(y), sizeof(x));
resArray = new int[totalLength];
int j = 0;
for (int i = 0; i < maxLength; i++)
{
if (i < sizeof(x))
{
resArray[j] = x[i];
j++
}
if (i < sizeof(y))
{
resArray[j] = y[i];
j++
}
if (i < sizeof(z))
{
resArray[j] = z[i];
j++
}
}
它不是最快的解决方案,但可以处理不同长度的数组。
编辑:
不要忘记使用new
分配的内存。您可以考虑使用std :: vector
一些C 11?
怎么样#include <vector>
int main()
{
std::vector<int> x {2,3,1,4,5}, y {1,3,5,7,9}, z {3,5,4,6,1};
std::vector<int> w;
for (int i {}; i < x.size(); ++i)
{
w.insert(v.end(),{x[i], y[i], z[i]});
}
}
相关文章:
- 数组类 阵列的打印输出
- 将积分类型的数组作为另一个不相关的积分类型的阵列进行访问的安全且符合标准的方法
- 使用 std::transform 在 2d C 阵列上转换为 1d C 数组
- 如何释放子阵列的mem,它是更大数组的一部分
- 如何将X 2维数组连接到一个三维阵列中
- 我有一系列阵列.可以从一个数组中阅读一些元素和另一个数组中的其他元素
- 数组 - 循环遍历辅助阵列
- 位阵列的位移动并写入得分到另一个数组
- 唯一/共享 ptr 用于在数组超出范围后自动删除阵列
- 如何将浮子数组阵列从Swift传递到C 功能
- 将25个甚至整数存储到一个名为intlist的整数阵列中,然后在屏幕上显示数组,并在屏幕上显示名为fivintegers
- Arduino(C )condenate char*阵列与float数组
- 指针阵列在一个对象数组中函数
- 从 C 数组进行 STL 阵列,无需复制
- 将子阵列分类为整个数组
- C 静态数组,例如动态阵列
- 存储文件中的字符串,但是数组仍然为空?阵列大小的循环
- 快速复制数组到阵列
- 将阵列传递到Boost Vector元组中
- 指向字符阵列数组的指针