你如何找到一组元素的总和?

时间:2015-06-15 15:50:57

标签: c++ set add

#include <iostream>
#include<algorithm>
#include<vector>
#include<set>
using namespace std;

int main() {
    int i,sum,sum1,n;
    cin>>n;
    vector<int>pre;
    set<int>s1;
    set<int>s2;
    int temp1[n];
    int temp2[n];
    for(i=0;i<n;++i)
        cin>>temp1[i];
    for(i=0;i<n;++i)
        cin>>temp2[i];
    for(i=0;i<sizeof(temp1);++i)
        s1.insert(temp1[i]);    
    for(i=0;i<sizeof(temp2);++i)
        s1.insert(temp2[i]);
    for(i=n;i>=0;--i)
        sum+=i;

    for(i=0;i<s1.size();++i)
        sum1+=s1[i];
    if(sum==sum1)
        cout<<"I become the guy.";
    else
         cout<<"Oh, my keyboard!";
    return 0;
}

ideone链接:https://ideone.com/trfOz0 我试图在集合s1中添加元素,但似乎这种方式不起作用,我该怎么办?

2 个答案:

答案 0 :(得分:3)

您无法为std::set编制索引。它不是那样构建的。您可以检查会员资格,但不能选择n元素。

为了得到总和,你必须迭代集合 - 但不是通过索引,通过迭代器:

int sum = 0;
for (std::set<int>::iterator it = s1.begin(); it != s1.end(); ++it) {
    sum += *it;
}

或使用std::accumulate

int sum = std::accumulate(s1.begin(), s1.end(), 0);

或者在C ++ 11中:

int sum = 0;
for (int i : s1) {
    sum += i;
}

答案 1 :(得分:0)

  1. 您不会初始化变量sumsum1。在C ++中使用未初始化的变量是未定义的行为。

  2. std::set未定义operator[]。所以你的代码不会编译。

  3. set之类的STL容器求和的最简单方法是使用

    std::accumulate(s1.begin(), s1.end(), 0);

    如果集合不包含任何元素,0(必须与集合中包含类型的类型相同)是您想要的值。