0

我需要创建两个集合的联合数组,以 C 数组的形式给出。这就是我到目前为止所拥有的。我认为我的 if 条件是正确的,但输出只打印出一组该数组。你能指出我做错了什么吗?

#include "union_intersection.h"
#include <iostream>
using namespace std;


template <typename T>
void Union(T* left,   int left_size,
           T* right,  int right_size,
           T* result, int& result_size)
{
    
    int i=0, j=0;
    while (i< left_size && j <right_size){
        if (left < right)
        {
            result = left;
            cout<< *result<< "\t";
            i++;
            left++;
            result_size++;
        }
        else if (right<left)
        {
            result =right;
            cout<< *result << "\t";
            j++;
            right++;
            result_size++;
        }
        else
        {
           result =left;
           cout<< *result <<"\t";
           i++; j++;
           left++;
           right++;
           result_size++;
        }

    }
    
}

4

2 回答 2

0
  • 您正在比较指针,而不是指向的内容。
  • 当它到达一个数组的末尾时,其他数组的内容将被忽略,因为条件 inwhile要求两个数组都剩余一些元素。

尝试这个:

#include "union_intersection.h"
#include <iostream>
using namespace std;


template <typename T>
void Union(T* left, int left_size, T* right,
               int right_size, T* result, int& result_size)
{
    
    int i=0, j=0;
    while (i< left_size || j <right_size){ // change condition to "at least one array have unprocessed elements"
        if (j >= right_size || *left < *right) // compare what is pointed at, and add condition "reached at end of one array"
        {
            result = left;
            cout<< *result<< "\t";
            i++;
            left++;
            result_size++;
        }
        else if (i >= left_size || *right<*left) // compare what is pointed at, and add condition "reached at end of one array"
        {
            result =right;
            cout<< *result << "\t";
            j++;
            right++;
            result_size++;
        }
        else
        {
            result =left;
            cout<< *result <<"\t";
           i++; j++;
           left++;
           right++;
           result_size++;
        }

    }
    
}

参数的值被忽略并用作简单的局部变量看起来也很奇怪result,但我认为这不是无效的,因为问题只涉及打印输出并且没有关于应该写入或读取什么的规范/从 所指向的result

于 2020-09-03T04:49:09.300 回答
0

在@MikeCat 的帮助下,下面是我的完成功能。我还包括循环以打印出剩余的元素。

template <typename T>
void Union(T* left, int left_size, T* right,
               int right_size, T* result, int& result_size)
{

    int i=0, j=0;
    while (i< left_size && j <right_size){
        if (*left < *right || j >=right_size)
        {
            result = left;
            cout<< *result<< "\t";
            i++;
            left++;
            result_size++;
        }
        else if (*right<*left || i>= left_size)
        {
            result =right;
            cout<< *result << "\t";
            j++;
            right++;
            result_size++;
        }
        else
        {
            result =left;
            cout<< *result <<"\t";
           i++; j++;
           left++;
           right++;
           result_size++;
        }

    }
    while (i < left_size)
    {
        cout<< *left<< "\t";
        left++;
        ++i;
        result_size++;
    }
    while (j < right_size)
    {
        cout<< *right<< "\t";
        ++j;
        right++;
        result_size++;
    }

}
于 2020-09-04T08:27:03.743 回答