Форум программистов, компьютерный форум CyberForum.ru

Объединить массивы - C++

Восстановить пароль Регистрация
 
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
19.09.2013, 19:22     Объединить массивы #1
Есть 2 множества чисел в массивах int. A и B. Кол-во элементов Na, Nb соответственно. Массивы сортированы по возрастанию, и в них нет повторов. Нужно в массив C записать объединение как множество(С=A U B) за один проход, и в переменную Nc поместить длину массива С.
Пример : A {1,3,5,6}, B{1,2,4,8}. Тогда C {1,2,3,4,5,6,8} Nc=7.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
5943 / 5548 / 1783
Регистрация: 18.12.2011
Сообщений: 14,167
Завершенные тесты: 1
19.09.2013, 19:44     Объединить массивы #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
int i1=0,i2=0;Nc=0;
while(i1<Na && i2<Nb)
{
   if(A[i1]<B[i2])
   {
        C[Nc]=A[i1];i1++;
   }else
   {
         C[Nc]=A[i2];i2++;
  }
  Nc++;
}
fishec
 Аватар для fishec
118 / 118 / 30
Регистрация: 07.09.2013
Сообщений: 337
19.09.2013, 19:50  [ТС]     Объединить массивы #3
Цитата Сообщение от zss Посмотреть сообщение
while(i1<Na && i2<Nb)
А что если один массив кончится раньше другого, остаток не запишется.
Ev[G]eN
Эксперт С++
 Аватар для Ev[G]eN
5093 / 1531 / 381
Регистрация: 23.01.2011
Сообщений: 3,148
19.09.2013, 22:56     Объединить массивы #4
уже давно все придумано
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <algorithm>
#include <iterator>
#include <iostream>
#include <set>
 
int main()
{
    std::set <int> firstSet = {1, 3, 5, 6};
    std::set <int> secondSet = {1, 2, 4, 8};
 
    std::set <int> resultSet;
    std::set_union(firstSet.begin(), firstSet.end(), secondSet.begin(), secondSet.end(), std::inserter(resultSet, resultSet.begin()));
    std::copy(resultSet.begin(), resultSet.end(), std::ostream_iterator <int> (std::cout, " "));
 
    return 0;
}
Yandex
Объявления
19.09.2013, 22:56     Объединить массивы
Ответ Создать тему
Опции темы

Текущее время: 03:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru