我认为是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
非常感谢!
答案 0 :(得分:2)
只需从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];
}
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