STL中copy函数类型问题

#include
#include
#include
using namespace std;

//输出指定的整型顺序容器的元素
template
void printContainer(const char* msg, const T& s) {
cout << msg << ":";
copy(s.begin(), s.end(), ostream_iterator(cout, " "));
cout << endl;
}

int main() {
//从标准输入读入10个整数,将它们分别从s的头部加入
deques;
for (int i = 0; i < 10; i++) {
int x;
cin >> x;
s.push_front(x);
}
printContainer("deque at first",s);
//用s容器的内容的逆序构造列表容器1
list l (s.rbegin(), s.rend());
printContainer("list at first", l);

//将列表容器l的每相邻两个容器顺序颠倒
list<int>::iterator iter = l.begin();
while (iter != l.end()) {
    int v = *iter;                                          //得到一个元素
    iter = l.erase(iter);                                   //将该元素删除,得到指向下一个元素的迭代器
    l.insert(++iter, v);                                        //将刚刚删除的元素插入下一个位置
}
printContainer("list at last", l);

//用列表容器l的内容给s赋值,将s输出
s.assign(l.begin(), l.end());
printContainer("deque at last", s);
return 0;

}
各位 问下 这个程序再编译的时候提示 copy(s.begin(), s.end(), ostream_iterator(cout, " "));中的 是一个意外类型
编译不通过
这个是什么原因造成的

 1.#include <iterator>
2.std::ostream_iterator<int>(std::cout," ")

是不是缺少这些

程序没错,可以运行,参考:
http://codepad.org/h3JOfGap

检查你的编译器的环境。你可以充分利用codepad.org,它是一个在线的编译器,你输入代码(记得选择左边C++,默认是C),如果有错会提示你错误。如果没错,会显示结果。