我正在尝试连接2个int数组,然后尝试对结果数组进行排序。阅读效果很好,但是我认为连接部分存在一些问题。如果有人能启发我,我会很高兴,请原谅我的英语垃圾。注意:该代码应保持在较低的lvl编程水平(例如C ++新手-所有主代码)上面的代码:
int N, M,vect1[500],vect2[500];
cin>>N;
for(int i=0; i<N; i++)
cin>>vect1[i];
cin>>M;
for(int i=0; i<M; i++)
cin>>vect2[i];
int rez1 = sizeof(vect1) / sizeof(vect1[0]);
int rez2 = sizeof(vect2) / sizeof(vect2[0]);
int rez3=rez1+rez2;
vect1[N+rez3];
int j=0;
for(int i = rez1; i < rez3 ; i++`
{
vect1[i]=vect2[j];
j++;
}
int sortat = 0, aux;
while (sortat == 0)
{
sortat = 1;
for (int i = 1; i < rez3; ++i)
if (vect1[i] > vect1[i + 1])
{
sortat = 0;
// interschimbam pe v[i] cu v[i + 1]
aux = vect1[i];
vect1[i] = vect1[i + 1];
vect1[i + 1] = aux;
}} for(int i=0; i <rez3; i++)
cout<<vect1[i];
return 0;
答案 0 :(得分:2)
template <class Type, size_t sizeA, size_t sizeB>
void concat_arrays(const Type(&a)[sizeA],
const Type(&b)[sizeB],
Type(&result)[sizeA + sizeB])
{
Type(&midpoint)[sizeB] = (Type(&)[sizeB])(result[sizeA]);
std::copy(a, a + sizeA, result);
std::copy(b, b + sizeB, midpoint);
}
您可以使用以下方式:
int main()
{
int a[3] = { 1, 2, 3 };
int b[3] = { 10, 20, 30 };
int c[6];
concat_arrays(a, b, c); // c = a . b
size_t cSize = sizeof(c) / sizeof(*c);
for (int i = 0; i < cSize; i++)
std::cout << c[i] << std::endl;
return 0;
}
答案 1 :(得分:0)
std::vector
的用法类似于C样式数组,但没有令人讨厌的怪癖的一半。
#include <iostream> // for std::cin, std::cout
#include <vector> // for std::vector
#include <algorithm> // for std::sort
int main()
{
int N, M;
std::cin >> N;
std::vector<int> vect1(N); // Allocates N ints
for(int i = 0; i != N; ++i)
std::cin >> vect1[i]; // Indexed like an array
std::vector<int> vect2(M); // Allocates M ints
for(int i = 0; i != M; ++i)
std::cin >> vect2[i];
vect1.reserve(N + M); // Reallocate to fit more
vect1.insert(vect1.end(), vect2.begin(), vect2.end()); // add elements at the back
std::sort(vect1.begin(), vect1.end()); // All the algorithms operate on pairs of iterators
for(int i = 0; i != M + N; ++i)
std::cout << vect1[i];
}