当我试图使用std::for_each()
和std::bind()
来过滤vector
中的元素并将这些过滤元素放入新的vector
时,为什么下面的代码不能工作?
void mypred(int a, int b, vector<int>& c){
if(a < b){
cout <<"yes" << endl;
c.push_back(a);
}
}
int main(){
vector<int> test = {1,2,3,4,5,6,7};
vector<int> final;
final.reserve(10);
for_each(test.begin(), test.end(), bind(mypred, placeholders::_1, 3, final));
for(auto i = final.begin(); i != final.end(); i++){
cout << *i << endl;
}
return 0;
}
此代码只能打印出两个yes
。但在向量final
中没有。
我终于知道怎么回事了。感谢@MikeVine的帮助。std::bind()
将使用参数的副本而不是引用。所以我们需要添加std::ref()
,让它使用引用。