首页 > 解决方案 > C ++:在accumulate方法中使用Lambda函数

问题描述

我有一个二维的vector< vector<int> >,说

contests = [[5, 1], [2, 1], [1, 1], [8, 1], [10, 0], [5, 0]]

我想用来accumulate获取第一个元素的总和,所以我使用 lambda 函数来访问向量向量中的正确维度:

#include <iostream>
#include <vector>
#include <numeric>

int main() {
    std::vector< std::vector<int> > 
        contests = {{5, 1}, {2, 1}, {1, 1}, {8, 1}, {10, 0}, {5, 0}};
    int sum = std::accumulate(contests.begin(),contests.end(), 0, 
                  [](const std::vector<int>& a, const std::vector<int>& b)->int 
                      {return a[0] + b[0];}
              );
    
    std::cout << sum << std::endl;
    
    return 0;
} 

结果我得到一个很长的编译错误,最后一行指出:

    note: candidate: ‘main(int, std::vector<std::vector<int> >)::<lambda(const std::vector<int>&, const std::vector<int>&)>’
                     [](const vector<int>& a, const vector<int>& b)->int {return a[0] + b[0];}
                                                       ^~~
main.cpp:37:55: note:   no known conversion for argument 1 from ‘int’ to ‘std::vector<int>’

如何让 lambda 识别正确的参数?

标签: c++c++11lambda

解决方案



推荐阅读