for_each使用vector <bool>的lambda进行修改

时间:2016-07-26 09:19:15

标签: c++ c++11 lambda

当我尝试使用for_each更改向量时:

vector<bool> sub_accs_ind(vec_ids_.size());
std::for_each(sub_accs_ind.begin(), sub_accs_ind.end(), [](bool& b){ b = false; });

导致错误 /usr/include/c++/4.8/bits/stl_algo.h:4417:14: error: no match for call to ‘(main(int, char* const*)::__lambda3) (std::_Bit_iterator::reference)’ __f(*__first);

你能指导我这里有什么问题吗?

1 个答案:

答案 0 :(得分:8)

std::vector<bool> is not a container

它的迭代器不返回bool&,而是返回代理实例。在C ++ 11中,您必须明确命名其类型:

std::for_each(
    sub_accs_ind.begin(),
    sub_accs_ind.end(),
    [](decltype(sub_accs_ind)::reference b){ b = false; }
);

C ++ 14允许您将参数声明为auto&&以容纳实际引用和代理。