C ++添加对列表的元素

时间:2015-07-21 16:38:36

标签: c++ vector stl

我有一对int的向量,我想添加每对的所有第一个元素。我写了以下代码

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

#define PII pair<int,int>
using namespace std;

int main() {
    vector<pair<int,int>> v;
    v.push_back(PII(1,2));
    v.push_back(PII(3,4));
    v.push_back(PII(5,6));
    cout<<accumulate(v.begin(),v.end(),0,[](auto &a, auto &b){return a.first+b.first;});
    return 0;
}

这里给出错误http://ideone.com/Kf2i7d。 所要求的答案是1 + 3 + 5 = 9.我无法理解它给出的错误。

2 个答案:

答案 0 :(得分:6)

在此算法调用中

cout<<accumulate(v.begin(),v.end(),0,[](auto &a, auto &b){return a.first+b.first;});

其第三个参数初始化为0,因此推导出类型int

它对应于算法的累加器,它累加lambda表达式的第二个参数所提供的值。

所以你必须写

cout<<accumulate(v.begin(),v.end(),0,[](auto &a, auto &b){return a + b.first;});

至于我,我会用long long int类型的整数文字初始化它。例如

cout<<accumulate(v.begin(),v.end(),0ll,[](auto &a, auto &b){return a +b.first;});

答案 1 :(得分:2)

std::accumulate遍历每个元素,并使用当前元素和累加器的当前值调用提供的函数。

累加器的类型为int,而不是pair<int, int>,因此您需要修复lambda函数以接受正确的参数类型。