c++ - for_each 用 vector<bool> 的 lambda 就地修改

标签 c++ c++11 lambda

当我尝试使用 for_each 就地更改 vector 时:

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);

你能告诉我这里有什么问题吗?

最佳答案

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&& 以适应真实引用和代理。

关于c++ - for_each 用 vector<bool> 的 lambda 就地修改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38585826/

相关文章:

c++ - 使用 cmd line args 使程序崩溃

具有依赖性的 C++ 策略设计

c++ - Boost.Lambda 和 Boost.Function 不能很好地与 Boost.Array 配合使用,为什么?

c++ - 是否建议显式地使重写函数成为虚拟的?

c++ - 具有用户定义的字符串文字的底层字符数据的存储持续时间

c++ - 在 C++ 中实现原始递归组合器

c++ - 在 C++ 中正确实现 Vector 3

c++ - 为什么没有 std::stou?

c# - 不能在表达式树的 lambda 中使用动态委托(delegate)参数

java - 如何使用 Java 8 流将列表元素映射到它们的索引?