连接数组并对它们排序

时间:2018-12-14 13:52:29

标签: c++ arrays int concatenation

我正在尝试连接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; 

2 个答案:

答案 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];
}