Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Вычислить расхождение в двух массивах


Автор: vnn 24.10.2011, 13:56
В функцию передается два массива m1 и m2, функция возвращает массив m3. В m3 элементы массива m2 -  которых нет в m1.
В PHP есть функция http://ua2.php.net/manual/ru/function.array-diff.php, на С++ есть что-то похожие?

Автор: fish9370 24.10.2011, 14:01
Цитата(vnn @  24.10.2011,  13:56 Найти цитируемый пост)
В функцию передается два массива m1 и m2, функция возвращает массив m3. В m3 элементы массива m2 -  которых нет в m1.В PHP есть функция array_diff(), на С++ есть что-то похожие?


а что это какая-то запредельная функция? ее трудно написать?

- нет стандартной библиотеки для работы с масивами в Си++

Автор: bsa 24.10.2011, 15:20
Цитата(fish9370 @  24.10.2011,  15:01 Найти цитируемый пост)
- нет стандартной библиотеки для работы с масивами в Си++ 

Вообще-то, есть. STL она зовется. Только массивы называются не массивами, а контейнерами, так как массив это более узкое понятие.
Конкретно этой функции там нет. Но никто не мешает ее написать:
Код
template<typename T>
struct DiffHelper
{
    DiffHelper(const std::vector<T> &v, std::vector<T> &v) : v_(v), r_(r) {}
    void operator()(const T &a) const {
       if (std::find(v_.begin(), v_.end(), a) == v_.end())
          r_.push_back(a);
    }
private:
    const std::vector<T> &v_;
    std::vector<T> &r_;
};

template<typename T>
inline std::vector<T> array_diff(const std::vector<T> &v1, const std::vector<T> &v2)
{
   std::vector<T> ret;
   std::for_each(v1.begin(), v1.end(), DiffHelper<T>(v2, ret));
   return ret;
}

Автор: azesmcar 24.10.2011, 16:31
Цитата(vnn @  24.10.2011,  13:56 Найти цитируемый пост)
на С++ есть что-то похожие?

Есть, http://www.cplusplus.com/reference/algorithm/set_difference/

Одно но: контейнеры должны быть http://www.cplusplus.com/reference/algorithm/sort/. 

Автор: baldina 24.10.2011, 17:04
даже с предварительной сортировкой этот метод гораздо быстрее сравнения каждого с каждым

Автор: bsa 24.10.2011, 17:28
Цитата(baldina @  24.10.2011,  18:04 Найти цитируемый пост)
даже с предварительной сортировкой этот метод гораздо быстрее сравнения каждого с каждым 

 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)