假设我有以下功能:
int foo (int a)
{
return something;
}
我该怎么办?
vector<int> v;
std::for_each( v.begin(), v.end(), std::bind1st(std::minus<int>(), foo) );
我想要这样工作:for_each
将当前元素传递给仿函数,仿函数调用foo
然后减去传递的向量元素和调用foo
的结果。是否有可能只使用std,而不是使用boost或自编写的函子?
答案 0 :(得分:2)
这有点可怕但是在C ++ 11中......
#include <vector>
#include <functional>
#include <algorithm>
int foo(int a)
{
return a;
}
int operator-(int b, std::function<int(int)> a)
{
return b - a(b);
}
int main()
{
std::vector<int> v = {1,2,3,4,5};
std::for_each( v.begin(), v.end(), std::bind((int(*)(int, std::function<int(int)>))(&operator-), std::placeholders::_1, &foo) );
return 0;
}
使用lambdas的方式不那么可怕
std::for_each(v.begin(), v.end(), [](int a) -> int { return a - foo(a); });
答案 1 :(得分:0)
如果您不想修改矢量,我会假设您想将其转换为另一个矢量。
#include <algorithm>
#include <iterator>
#include <vector>
int foo(int a)
{
return a;
}
int foo2(int a)
{
return a - foo(a);
}
int main()
{
std::vector<int> v;
v.push_back(10);
v.push_back(20);
v.push_back(30);
std::vector<int> v2;
std::transform(v.begin(), v.end(), std::back_inserter(v2), foo2);
return 0;
}