2
当编写自定义谓词函数/函子传递给STL算法时,是否允许使用谓词的谓词地址?STL谓词是否允许使用它们的参数地址?
这是激发问题的问题。我有一个矢量vec
和一个矢量inds
,其中包含一些索引到vec
。我想删除vec
其中的索引列于inds
中的元素。
一种方法是使用remove_if
与谓词函子InInds
,通过采取其地址来确定其参数在vec
指数:
class InInds {
private:
const vector<Element>& vec_;
const vector<int>& inds_;
public:
InInds(const vector<Element>& vec, const vector<int>& inds)
: vec_(vec), inds_(inds) {}
bool operator()(const Element& element) {
// WARNING: uses the ADDRESS of element, not its value. May not be kosher?
int index = &element - &vec[0];
return std::find(inds_.begin(), inds_.end(), index) != inds_.end();
}
}
InInds
作品如果vec
直接调用一个元素。如果在元素的副本上调用它,它将会中断,因为该副本的地址对确定element
的索引无用。
我的问题是:这个谓词在remove_if
中是否适用于任何符合标准的编译器?或者谓词严格意味着只能在值上运行,而不是在地址上运行?
只需使用一个循环。试图让算法适合他们不适合的地方不会对任何事情有所帮助。 – 2012-04-06 21:14:32
@NicolBolas我应该从你的回答中推断,在谓词中使用地址肯定不符合标准? – SuperElectric 2012-04-06 21:29:28
不管是不是无关紧要;所有参与者只需编写一个循环就会更容易,更清晰。 – 2012-04-06 22:57:29