- -
ссылки
(
http://forum.oszone.net/showthread.php?t=58307)
ссылки
Ребята помогите пожалуста,то я чето не пойму:
- Даны два массива : А[n] и B[m]. Необходимо создать третий массив, в котором нужно собрать:
- Элементы обоих массивов;
- Общие элементы двух массивов;
- Элементы массива A, которые не включаются в B;
- Элементы массива B, которые не включаются в A;
- Элементы массивов A и B, коотрые не являются общими дял них (то есть объединение результатов двух предыдущих вариантов).
Огромное спасибо!!!!
|
На 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.
Там все нужные функции есть.
|
Обнаружил хелп:
Код:
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.
© OSzone.net 2001-