我有两个谓词向量:
typedef std::function<bool(int)> pred;
vector<pred> v1;
vector<pred> v2;
我需要将它们合并为一个,但来自第二个向量的谓词应该被反转(即它们应该true
在它们正常返回的情况下返回false
)。所以,实际上我需要一种“反转”包装器。
我创建了一个反转函数和一个包含原始谓词并反转其值的结构:
struct inverted
{
pred pr;
inverted(pred pr_) : pr(pr_) {}
bool operator () (int i) {return !pr(i);}
};
pred CreateInverted(pred pr)
{
return inverted(pr);
}
使用它,向量谓词的反转可能如下所示:
transform( v2.begin(), v2.end(), v2.begin(), CreateInverted );
但我想知道是否有更好的解决方案,特别是基于标准库?
没有 C++11,允许使用 Boost。