我建立了一个通用函数,该函数接受一个特定的容器(在其开始和结束时使用Iterator)和一个谓词(用作某种条件检查的functor)并计算该容器中对的对数谓词条件。 如下
//Counts number of pairs in a container that follow the rule of the Predicate
template <typename Iterator, typename Predicate>
int countPairs(const Iterator first, const Iterator last, Predicate pred){
int counter = 0;
for(Iterator current = first; current<last; ++current){
Iterator next(current);
for(++next; next<last; ++next){
if(pred(*current, *next)){
counter++;
}
}
}
return counter;
}
然后,我想使用泛型函数来检查某个向量是否已排序。因此,我建立了以下“谓词”,用于检查是否对一对数字进行了排序:
bool isBigger(int a, int b){
return b < a;
}
然后,我建立了一个名为的函数,该函数基本上使用上面的两个函数来获取向量并检查其是否已排序:
bool isSorted(std::vector<int>& v){
int size = v.size();
if(size == 0 || size == 1){
return true;
}
return countPairs(v.begin(), v.end(), isBigger()) == 0;
}
当我尝试构建时,if为我提供了以下错误:
错误:没有匹配函数可调用“ isBigger” 注意:候选函数不可行:需要2个参数,但0个是 提供
我非常确定它是因为在countPairs调用中使用了isBigger函数。但这就是通用代码不起作用的方式吗?
非常感谢你。