不能使用 std::for_each() 和 std::bind() 来过滤向量中的元素并将这些过滤后的元素放入新向量中



当我试图使用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(),让它使用引用。

相关内容

  • 没有找到相关文章

最新更新