在一个测验题中,我认为以下代码不会编译,因为我期望迭代器类型为
我可以在C++98、C++11和C++14中成功编译以下程序,并且它打印出结果
为什么在那一行中,迭代器类型
set<int>::iterator
而不是set<int, int>::iterator
。我可以在C++98、C++11和C++14中成功编译以下程序,并且它打印出结果
9 5 4 3 2 1 0 0, 1, 2, 3, 4, 5, 9,
。这个程序似乎是正确的。为什么在那一行中,迭代器类型
set<int, int>::iterator
是可接受的呢?#include <iostream>
#include <set>
#include <vector>
#include <functional>
using namespace std;
int main(){
int mynumbers[] = { 3, 9, 0, 2, 1, 4, 5 };
vector<int> v(mynumbers, mynumbers+7);
set<int> set1(v.begin(),v.end());
set<int, greater<int> > set2(v.begin(), v.end());
//
// The following iterator type compiles. Why is that so ?
//
for(set<int, int>::iterator i=set2.begin();i!= set2.end(); i++)
cout<<*i<<" ";
for(set<int>::iterator i=set1.begin();i!= set1.end(); i++)
cout<<*i<<", ";
cout<<endl;
return 0;
}