你如何找到集合中元素的总和?
how do you find the summation of elements in a set?
#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 link:https://ideone.com/trfOz0
我正在尝试添加集合 s1 中的元素,但似乎这种方法不起作用,我该怎么做?
您没有初始化变量 sum
和 sum1
。使用未初始化的变量是 C++ 中的未定义行为。
std::set
没有定义 operator[]
。所以你的代码不会编译。
像 set
这样对 STL 容器求和的最简单方法是使用
std::accumulate(s1.begin(), s1.end(), 0);
如果集合不包含任何元素,0
(必须与集合中的包含类型相同)是您想要的值。
您无法为 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;
}
#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 link:https://ideone.com/trfOz0 我正在尝试添加集合 s1 中的元素,但似乎这种方法不起作用,我该怎么做?
您没有初始化变量
sum
和sum1
。使用未初始化的变量是 C++ 中的未定义行为。std::set
没有定义operator[]
。所以你的代码不会编译。
像 set
这样对 STL 容器求和的最简单方法是使用
std::accumulate(s1.begin(), s1.end(), 0);
如果集合不包含任何元素,0
(必须与集合中的包含类型相同)是您想要的值。
您无法为 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;
}