因此问题表明我必须输入包含重复项的未排序元素数组,因此决定使用sort。我对此并不陌生,
我正在尝试在GFG的IDE上运行它。
#include <iostream>
#include <bits/stdc++.h>
int main() {
//code
int n,size,a;
cin>>n;
while(n--)
{
cin>>size;
int a[size];
set<int> s;
for(int i=0;i<size;i++)
{
cin>>a;
s.insert(a);
}
for(int i=s.begin();i!=s.end();i++)
cout<<i<<" ";
return 0;
}
错误消息:
no match for 'operator>>' (operand types are 'std::istream {aka std::basic_istream<char>}' and 'int [size]')
cin>>a;
答案 0 :(得分:1)
您显示的错误的来源是此行:
int main() {
//...
int a[size];
// ...
}
a
现在是一个数组,在operator>>()
中没有std::istream
的重载。
解决方案很简单,只需更改此行:
cin>>a;
对此:
cin>>a[i];
现在,应该不存在编译问题,尽管仍然存在大量不良做法,其中一些答案和其他注释以及答案已尝试纠正。我会留给他们。
我唯一要警告您的是
int a;
some block {
int a[size];
}
// try to use a:
a[i]; // bad
程序中有2个名为a
的变量。一旦秒a超出范围,它将破坏a
的数组版本,而改用常规int a
。只是要对此保持警惕。
P.S。好吧,所以我要提到另一个别人没有提到的。
以下is ill formed,因为它尝试使用可变长度数组:
cin>>size;
int a[size];
某些编译器将支持它,但从技术上讲,这是一个格式错误的程序。一般来说,不要这样做。
答案 1 :(得分:0)
我重写了您的代码以向您显示您犯的一些错误:
#include <iostream>
#include <set>
int main() {
using namespace std;
int size;
cin >> size;
set<int> s;
for(int i=0;i<size;i++)
{
int a;
cin>>a;
s.insert(a);
}
for(auto i : s)
cout<<i<<" ";
return 0;
}
a
必须是单个元素,cin
才能使用它。其次,begin()
端end()
在iterator
上给您set
。为了简化生活,您可以使用循环https://en.cppreference.com/w/cpp/language/range-for
一些最后的评论:
<bits/stdc++.h>
,而是适当的标准标题,以确保您的代码可移植。using namespace std
所述,begin()
在set
中的工作方式,请查看以下内容:https://en.cppreference.com/w/cpp/container/set