C++11 嵌套lambda的问题

C++11 嵌套lambda的问题,c++11,lambda,C++11,Lambda,我可能在这里犯了一些基本错误,但是: std::array<int, 3> arr = { 1, 2, 3 }; std::vector<int> vecint; vecint.push_back(1); vecint.push_back(2); std::array arr={1,2,3}; 向量向量; 向量向后推(1); 向量向后推(2); 这是比较arr中的元素和vecint中的元素的一种显而易见的方法 std::for_each(vecint.begin(),

我可能在这里犯了一些基本错误,但是:

std::array<int, 3> arr = { 1, 2, 3 };
std::vector<int> vecint;
vecint.push_back(1);
vecint.push_back(2);
std::array arr={1,2,3};
向量向量;
向量向后推(1);
向量向后推(2);
这是比较arr中的元素和vecint中的元素的一种显而易见的方法

std::for_each(vecint.begin(), vecint.end(), [&arr](int vecvalue) {
    for (auto arritr = arr.begin(); arritr != arr.end(); ++arritr) {
        if (vecvalue == *arritr) {
            std::cout << "found!!! " << vecvalue << "\n";
        }
    }
});
std::for_each(vecint.begin()、vecint.end()、[&arr](int-vecvalue){
对于(自动arritr=arr.begin();arritr!=arr.end();++arritr){
如果(vecvalue==*arritr){
标准::cout

std::find
使用一个值作为第三个参数进行比较,而
std::find_if
使用一个
UnaryPredicate
(使用一个参数的函数对象)。您可能只是输入了一个错误/想要使用
std::find_if

使用
std::find_(如果
对我有效)


然后,如果编译器支持,当然还有基于范围的for循环变量:

for(auto const& ve : vecint)
{
    for(auto const& ae : arr)
    {
        if(ve == ae)
        {
            std::cout << "found!!! " << ve << "\n";
        }
    }
}
也就是说,
value
的类型和迭代器的类型是独立的。但是,在
std::find
的实现中,必须进行如下比较:

if(*first == value) { return first; }
此时,您正在比较
int
(表达式类型
*first
)和lambda(值类型
和闭包类型)。这是格式错误的(幸运的),因为没有从lambda到
int的转换,也没有声明适用于此处的比较运算符。

std::find
使用一个值作为第三个参数进行比较,而
std::find_if
使用一个
UnaryPredicate
(使用一个参数的函数对象)。您可能只是输入了一个错误/想要使用
std::find_if

使用
std::find_(如果
对我有效)


然后,如果编译器支持,当然还有基于范围的for循环变量:

for(auto const& ve : vecint)
{
    for(auto const& ae : arr)
    {
        if(ve == ae)
        {
            std::cout << "found!!! " << ve << "\n";
        }
    }
}
也就是说,
value
的类型和迭代器的类型是独立的。但是,在
std::find
的实现中,必须进行如下比较:

if(*first == value) { return first; }
此时,您正在比较
int
(表达式类型
*first
)和lambda(值类型
和闭包类型)。这是格式错误的(幸运的),因为没有从lambda到
int
的转换,也没有声明适用于这里的比较运算符

#include <iterator> // additionally

std::vector<int> result;
std::set_intersection(arr.begin(), arr.end(), vecint.begin(), vecint.end(),
                      std::back_inserter(result));
for(auto const& e : result)
{
    std::cout << e << std::endl;
}
template< class InputIt, class T >
InputIt find( InputIt first, InputIt last, const T& value );
if(*first == value) { return first; }