在下面的代码中,我创建了一个insert_iterator而不包含迭代器头。 怎么可能这个编译?我是c / c ++的新手,所以这可能会有一个明确的解释。
#include <list>
//#include <iterator>
int main()
{
std::list<int> mylist(10,1);
std::insert_iterator<std::list<int> > it(mylist,mylist.begin());
return(0);
}
答案 0 :(得分:7)
恰好编译,因为您的案例中的其他标题<list>
也在提取<iterator>
。这可能适用于一个实现,但在另一个实现上失败,甚至在当前库实现的下一个版本上失败。
你应该总是包含定义你使用的东西的标题,以确保它将在任何地方编译。请注意,有一些标准头文件的保证由其他标准头文件提取,但我不认为这是其中一个例外。