为什么只有在第二个参数大于3时它才起作用?我该如何解决?如果我对copy_if做同样的工作!任务:检查函子std :: bind的效果。尝试使用它来形成标准函子std :: Greater(模块)的条件。
#include <set>
#include <algorithm>
#include <iostream>
#include <vector>
#include <list>
#include <map>
#include <iterator>
#include <string>
#include <functional>
using namespace std;
template<typename T>
static void PrintVector(const std::vector<T> &v)
{
for (auto iterator = v.begin(); iterator != v.end(); ++iterator)
{
std::cout << *iterator << " ";
}
std::cout << std::endl;
}
int main()
{
std::cout << "Task_3: greater with std::bind\n";
ostream_iterator<int> out_it(cout, " ");
vector<int> v = { 1, 8, 7, 4, 3, 6, 2, 5 };
PrintVector(v);
auto greater_binded = bind(greater<int>(), placeholders::_1, 3);
sort(v.begin(), v.end(), greater_binded);
PrintVector(v);
return 0;
}
如文档中所述,std::copy_if
它期望一元谓词,即具有一个参数的std::sort
函数,另一方面需要比较函数,必须满足比较概念的要求。为什么你希望使用相同的功能,因此是完全不清楚std::copy_if
同工作std::sort
。
我该如何解决?
只需传递std::greater<int>
而不将第二个参数绑定到常量即可。如果确实需要使用std::bind
,则可以只传递两个参数:
auto greater_binded = bind(greater<int>(), placeholders::_1, placeholders::_2);
但这与greater<int>()
直接传递具有相同的效果。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句