使用一个东西,不明白它的道理,不高明
——侯捷老师
1. includes()函数声明
1.1 默认比较方式
template<class InputIterator1, class InputIterator2>
bool includes(InputIterator1 first1, InputIterator1 last1,
Inputiterator2 first2, InputIterator2 last2)
1.2 自定义比较方式
template <class InputIterator1, class InputIterator2, class Compare>
bool includes ( InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2, Compare comp );
2. 等价操作实现
template<class InputIterator1, class InputIterator2>
bool includes(InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, InputIterator2 last2) {
while (first2 != last2) {
if ((first2 == last1) || (*first2 < *first1)) return false;
if (!(*first1 < *first2) ++first2;
++first1;
}
return true;
}
3. 示例程式
bool myfunction (int i, int j) { return i<j; }
void test_includes() {
int container[] = {5,10,15,20,25,30,35,40,45,50};
int continent[] = {40,30,20,10};
std::sort (container,container+10);
std::sort (continent,continent+4);
// using default comparison:
if ( std::includes(container,container+10,continent,continent+4) )
std::cout << "container includes continent!\n";
// using myfunction as comp:
if ( std::includes(container,container+10,continent,continent+4, myfunction) )
std::cout << "container includes continent!\n";
}