合并3组阵列

Merging 3 sets of arrays

本文关键字:阵列 3组 合并      更新时间:2023-10-16

我被认为是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

非常感谢!

这只是用i04的循环的问题,然后将每个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]});
    }
}