Почему программа выводит 0? В описании функции сказано Returns true if the sorted range [first1,last1) contains all the elements in the sorted range [first2,last2).http://www.cplusplus.com/reference/algorithm/includes/. Но a содержит все элементы из b (1 и 2)
std::vector a{1, 2};
std::vector b{1, 2, 1, 2};
std::cout << std::includes(a.begin(), a.end(), b.begin(), b.end());
std::vector<int> a{1, 2}; // тут вы забыли аргумент шаблона
std::vector<int> b{1, 2, 1, 2};
Поменяйте местами обьекты, и все заработает
std::swap(a, b);
std::cout << std::includes(a.begin(), a.end(), b.begin(), b.end());
если b
является подмножеством a
, то получите положительный результат
Здесь по сути проверяется, входит ли диапазон полностью в другой диапазон, а не вычисляется разность множеств. Поэтому одинаковые элементы вполне допустимы (как в мультимножестве), и диапазона a
явно не хватает для включения диапазона b
.
А вот наоборот - вполне: проверьте сами
std::cout << std::includes(b.begin(), b.end(), a.begin(), a.end());
но не забудьте отсортировать :)
Другими словами, a
является подмножеством b
, но b
не является подмножеством a
- хотя бы потому, что в нем больше элементов :)
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Недавно вопрос прозвучал про этот алгоритмПо стандарту он принимает отсортированные последовательности, но у меня всегда выдавал правильный...
У меня есть обычная консольная форма регистрации: