合并3组数组

时间:2014-01-22 09:05:39

标签: c++ 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

非常感谢!

4 个答案:

答案 0 :(得分:2)

只需从i0进行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];
} 

here是工作的例子。


如果您使用的是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]);
}

答案 1 :(得分:1)

只要您知道x,y,z和w的大小,这是一个相当简单的解决方案。

在C ++中,与其他高级编程语言不同,大多数基于数组的操作不由特殊函数处理。相反,用户需要编写循环来自己完成此任务。

在你的情况下,假设 x,y,z和w都被正确地声明和定义,最直接的方法可能是使用for循环,如下所示:

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才能使其生效。

答案 2 :(得分:1)

一些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]});
    }
}

答案 3 :(得分:1)

您可能还需要考虑数组长度可能不同的事实。

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