Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   ссылки (http://forum.oszone.net/showthread.php?t=58307)

farik 19-12-2005 22:36 384843

ссылки
 
Ребята помогите пожалуста,то я чето не пойму:
  1. Даны два массива : А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать:
  2. Элементы обоих массивов;
  • Общие элементы двух массивов;
  • Элементы массива A, которые не включаются в B;
  • Элементы массива B, которые не включаются в A;
  • Элементы массивов A и B, коотрые не являются общими дял них (то есть объединение результатов двух предыдущих вариантов).
Огромное спасибо!!!!

pva 21-12-2005 15:09 385415

На C++, я бы посоветовал сначала отсортировать A и B (если это массивы):
Код:

std::vector<double> A, B;
// ... fill someway

std::vector<double> a1(A), b1(B);
std::sort(a1.begin(), a1.end());
std::sort(b1.begin(), b1.end());

дальше используются алгоритмы на сортированных списках (unique, merge и др.). К сожалению, у меня нет под рукой справочника, поэтому конкретно не пишу.

Если память позволяет, а вместо double используется что-то более тяжёлое, то лучше воспользоваться шаблоном set.
Там все нужные функции есть.


pva 22-12-2005 13:12 385819

Обнаружил хелп:
Код:

std::vector in_both(std::min(a.size(), b.size()));
in_both.erase(std::set_intersection(a.begin(), a.end(), b.begin(), b.end(), in_both.begin()));

std::vector not_in_a(b.size());
not_in_b.erase(std::set_difference(b.begin(), b.end(), a.begin(), a.end(), not_in_a.begin()));

std::vector not_in_b(a.size());
not_in_b.erase(std::set_difference(a.begin(), a.end(), b.begin(), b.end(), not_in_b.begin()));

std::vector not_in_both(not_in_a);
not_in_both.insert(not_in_b.begin(), not_in_b.end());

Для справедливости, все результаты можно отсортировать и пропустить через unique.


Время: 05:43.

Время: 05:43.
© OSzone.net 2001-