【问题标题】:how do you find the summation of elements in a set? [duplicate]你如何找到集合中元素的总和? [复制]
【发布时间】:2015-08-31 04:59:34
【问题描述】:
#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 中添加元素,但似乎这种方式不起作用,我该怎么做?

【问题讨论】:

    标签: c++ set add


    【解决方案1】:

    您不能索引std::set。它不是那样建造的。您可以检查成员资格,但不能只选择 nth 元素。

    为了获得总和,您必须遍历集合 - 但不是通过索引,而是通过迭代器:

    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;
    }
    

    【讨论】:

      【解决方案2】:
      1. 您没有初始化变量sumsum1。在 C++ 中使用未初始化的变量是未定义的行为。

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

      对像set 这样的 STL 容器求和的最简单方法是使用

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2022-11-25
        • 2016-01-03
        • 1970-01-01
        • 1970-01-01
        • 2020-09-17
        • 2020-08-21
        • 1970-01-01
        相关资源
        最近更新 更多