Вопрос 1>
Я хотел бы знать, почему в случае I мы должны использовать not2 (ptr_fun (ciCharCompare)) * , тогда как в случае II нам просто нужно использовать ciCharLess,Почему бы не использовать ptr_fun (ciCharLess) вместо?
Вопрос 2>
Есть ли общее правило, которому я могу следовать, когда использовать какую форму?
Спасибо
case I:
int ciCharCompare(char c1, char c2)
{
// case-insensitively compare chars c1 and c2
// return -1 if c1 < c2
// return 0 if c1 == c2
// return 1 if c1 > c2
}
string s1("Test 1");
string s2("test 2222222222222222");
pair<string::const_iterator, string::const_iterator>
p = mismatch(s1.begin(), s1.end(),
s2.begin(),
not2(ptr_fun(ciCharCompare))));
http://www.cplusplus.com/reference/algorithm/mismatch/
template <class InputIterator1, class InputIterator2, class BinaryPredicate>
pair<InputIterator1, InputIterator2>
mismatch (InputIterator1 first1, InputIterator1 last1,
InputIterator2 first2, BinaryPredicate pred );
пред :
Двоичный предикат, принимающий два элемента в качестве аргумента
Case II:
bool ciCharLess(char c1, char c2)
{
// return true if c1 precedes c2 in a case insensitive comparison
}
lexicographical_compare(s1.begin(), s1.end(), s2.begin(), s2.end(),
ciCharLess);
http://www.cplusplus.com/reference/algorithm/lexicographical_compare/
comp :
Объект функции сравнения, который, принимая два значения того же типа, что и значения, содержащиеся в диапазоне, возвращает true, если должен рассматриваться первый аргументменьше, чем второй аргумент.