С стандарт, 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';
}
Live on Wandbox
Это удивительно.Я проверил это с помощью libstdc ++ и libc ++, но мне кажется маловероятным, что это будет ошибкой в реализации стандартной библиотеки, учитывая, что она является частью библиотеки алгоритмов.Если это не тот алгоритм, который должен запускаться std::includes
, то что?