Сложение массивов путем объединения

187
30 августа 2019, 04:50

Понимаю, что много вопросов на эту тему уже писали. Мне нужно написать программу, которая будет объединять два массива, записывая в 3. Нету возможности написать код по другому, нужно правильно оформить этот, чтобы он складывал. 2 массива я уже отсортировал, записал один в переменную. Второй не могу сделать, чтобы он сравнивал с первым и записывал в третий те, каких нет. Ещё я не могу сделать правильную запись в третий. Не понимаю, как это сделать корректно.

SortArray& operator + (const Array &x) const override //объединение, тут нужна помощь
{
    const SortArray& temp = dynamic_cast<const SortArray&>(x);
    for(size_t i = 0; i < sz; i++)
        arr[sz] = arr[i];
    for(size_t i = 0; i < temp.sz; i++)
    {
        for (size_t j = 0; j < sz; j++){
            if (arr[i] = arr[j])
                break;
        arr[temp.sz] = arr[sz];
        }
    }
    SortArray *result = new SortArray (temp.arr, temp.sz + sz);
    return *result;
}
void foreach() // этот метод сортирует массив, работает корректно
    const
    override
{
    double temp;
    for (size_t i = 0; i < sz - 1; i++)
    {
        for (size_t j = 0; j < sz - i - 1; j++)
        {
            if (arr[j] > arr[j + 1])
            {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
}

Ссылка на всю программу

Answer 1
SortArray *result = new SortArray (temp.arr, temp.sz + sz);
size_t i = 0;
for (; i < sz; ++i)
        result->arr[i] = (temp.arr[i] < arr[i])
                ? temp.arr[i] : arr[i];
for(; i < result->sz; ++i)
    result->arr[i] = temp.arr[0];  
return *result;
Answer 2

Всем спасибо, особое спасибо @iksuy за хорошую мысль. Рабочий, но достаточно сырой код приложу. Если хотите его использовать, его нужно будет доработать.

SortArray& operator + (const Array &x) const override
{
    const SortArray& temp = dynamic_cast<const SortArray&>(x);
    size_t i = 0, j = 0, f = sz, s = temp.sz, th = 0;
    while ((i < f) && (j <= s))
    {
        if (arr[i] == temp.arr[j])
        {
            arr[th] = arr[i];
            th++;
            i++;
            j++;
        }
        else if(arr[i] < temp.arr[j])
        {
            arr[th] = arr[i];
            th++;
            i++;
        }
        else
        {
            arr[th] = temp.arr[j];
            th++;
            j++;
        }
    }
    while (i < f)
    {
        arr[th] = arr[i];
        th++;
        i++;
    }
    while (j < s)
    {
        arr[th] = temp.arr[j];
        th++;
        j++;
    }
    SortArray *result = new SortArray (arr, th);
    return *result;
}

Важно! Этот метод изменяет один из входящих в него массивов, что отрицательно может сказаться на конечном результате. Ещё этот метод работает только для упорядоченных массивов.

Answer 3

Это что:

arr[sz] = arr[i]

и тому подобное?

Добавлять можно с помощью std::vector<>.push_back(...).

Извините, что отвечаю, а не просто комментирую, не хватает репутации.

ps

my_vector<T>& my_vector<T>::operator += (const my_vector<T> x) {
    for (vector<T>::iterator it = x.begin(); it != x.end(); i++)
        push_back(*it);
    return *this;
}
Answer 4
array result = array1 + array2;
READ ALSO
Отправка multipart form-data на ssl сервер c++

Отправка multipart form-data на ssl сервер c++

В общем над проблемой бьюсь вторые суткиДело в отправке простого multipart/form-data запроса на ssl сервер

109
Количество точек в прямоугольнике

Количество точек в прямоугольнике

Линейный массив A содержит 2*N элементов, значения которых задаются по следующей формуле a[i]:=10*sin(N+i*i)Элементы массива нумеруются с единицы

136
Запись текста в std::string дважды. С++

Запись текста в std::string дважды. С++

Допустим у меня есть std::string strХочу ввести с клавиатуры текст, который скопируется в str

125
QT Vector QAction

QT Vector QAction

Стоит перед мной задача:

136