gpt4 book ai didi

c++ - std::for_each 优于 std::set,C++11

转载 作者:可可西里 更新时间:2023-11-01 18:05:33 25 4
gpt4 key购买 nike

遍历一个 vector 有效:

std::vector<int> collection = {2, 3, 4, 5435345, 2};
std::for_each(collection.begin(), collection.end(), [](int& i){cout << i << endl;});

但没有超过一个集合(编译错误):

std::set<int> collection = {2, 3, 4, 5435345, 2};
std::for_each(collection.begin(), collection.end(), [](int& i){cout << i << endl;});

为什么我不能用 std::for_each 遍历 std::set

奖金问题:另外,我想把lambda参数中的int&改成auto&,为什么不能自动推导呢?

最佳答案

std::set<T>::value_typeT const , 不是 T ;因此,lambda 的参数必须是值类型(即拷贝)或 int const& (从技术上讲,或 int const volatile& ),而不是 int& .即,这有效:

std::set<int> collection{2, 3, 4, 5435345, 2};
std::for_each(
collection.begin(),
collection.end(),
[](int const& i) { std::cout << i << std::endl; }
);

Bonus question: Also, I would like to change the int& in the lambda's argument to auto&, why can't this be automatically deduced?

因为标准说不能;从历史上看,我认为这是由于 lambda 和概念之间的交互过于复杂(在概念从草案中删除之前)。 但是,我听说新的 (C++11) 标准的第一个缺陷报告将准确地解决这个问题,因此您可能会在明年或之后看到对您选择的编译器的支持两个。 编辑:哦,看,C++14 现在有多态 lambdas...

关于c++ - std::for_each 优于 std::set,C++11,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8128989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com