改成
#include <iostream>
#include <set>
using namespace std;
template <typename T>
int main() {
set<T> s;
int n;
T a;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a;
s.insert(a);
}
for (auto it = s.begin(); it != s.end(); it++) {
cout << *it << " ";
}
cout << endl;
return 0;
}
第二个 for 循环声明迭代器时 iterator 不是有效的类型名,如果要使用 set<T>::iterator,必须明确指定类型
最好用auto,让编译器自动帮你判断迭代类型
如果输入的 T 是一个类型(int 或 double) 代码是可以工作的。但如果 T 是一个更复杂的类型,比如一个自定义的类,而这个类没有定义输入流运算符 (operator>>),那么 cin >> a 就会报错
#include <iostream>
#include <set>
using namespace std;
template <typename T>
int main() {
set<T> s;
int n;
T a;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a;
s.insert(a);
}
for (auto it = s.begin(); it != s.end(); it++) {
cout << *it << " ";
}
cout << endl;
return 0;
}
第二个 for 循环声明迭代器时 iterator 不是有效的类型名,如果要使用 set<T>::iterator,必须明确指定类型
最好用auto,让编译器自动帮你判断迭代类型
如果输入的 T 是一个类型(int 或 double) 代码是可以工作的。但如果 T 是一个更复杂的类型,比如一个自定义的类,而这个类没有定义输入流运算符 (operator>>),那么 cin >> a 就会报错

