Из стандарта std::includes
:
Возвращает:
true
если[first2, last2)
пуст или каждый элемент в диапазоне[first2, last2)
содержится в диапазоне[first1, last1)
. Возвращаетfalse
противном случае.
Примечание: поскольку это находится под [alg.set.operations], диапазоны должны быть отсортированы
Принимая это буквально, если мы допустим R1=[first1, last1)
и R2=[first2, last2)
, это оценивает:
∀a∈R2 a∈R1
Однако это не то, что на самом деле оценивается. Для R1={1}
и R2={1,1,1}
, std::includes(R1, R2)
возвращает false:
#include <algorithm>
#include <iomanip>
#include <iostream>
#include <vector>
int main() {
std::vector<int> a({1});
std::vector<int> b({1,1,1});
// Outputs 'false'
std::cout << std::boolalpha
<< std::includes(a.begin(), a.end(), b.begin(), b.end()) << '\n';
}
Это удивительно. Я проверил его как с libstdc++, так и с libc++, но мне кажется маловероятным, что это будет ошибкой в реализации стандартной библиотеки, считая его частью библиотеки алгоритмов. Если это не алгоритм, который должен запускать std::includes
, что это такое?