ostream_iterator(cout," ")这句该如何理解

ostream_iterator<int>(cout," ")这句该怎么理解啊
ostream_iterator<int>是个类型,后面直接加(cout," ")到底什么意思啊
------解决思路----------------------
构造函数的参数,语法上相当于有这样的定义:
template<class T>
struct Foo {
     Foo(int, double);  // 两个,别在意类型
};

你就可以用 Foo<char>(1, 1.5); 调用构造函数特定的构造函数。

但这里是cplusplus.com对 ostream_iterator构造函数参数的说明:
ostream_iterator (ostream_type& s, const char_type* delimiter);

含义:
s
A stream object, which is associated to the iterator.
Member type ostream_type is the type of such stream (defined as an alias of basic_ostream<charT,traits>, where charT and trais are the second and third class template parameters).
delimiter
C-string with a sequence of character to be inserted after every insertion.
Note that the iterator keeps a copy of the pointer passed (not the content of the C-string).
------解决思路----------------------
引用:
六楼,你有对象i1,i2,这样我理解的,我那个直接ostream_iterator<int>(cout," ")     中间没加对象的,怎么理解啊

看看下面的代码,也许能帮助你理解

#include <iostream>
#include <iterator>
#include <vector>
#include <deque>

using namespace std;

template<class InputIt, class OutputIt>
OutputIt my_copy(InputIt first, InputIt last, 
              OutputIt d_first)
{
    while (first != last) {
        *d_first++ = *first++;
    }
    return d_first;
}

int
main(int argc, char *argv[])
{
    vector<int> v1;
    vector<int>::const_iterator i1;
    deque<int> q2;
    front_insert_iterator<deque<int> > i2(q2);
    ostream_iterator<int> i3(cout," ");

    v1.push_back(0);
    v1.push_back(1);
    v1.push_back(2);
    v1.push_back(3);
    v1.push_back(4);
    v1.push_back(5);
    v1.push_back(6);
    v1.push_back(7);
    v1.push_back(8);
    v1.push_back(9);

    my_copy(v1.begin(), v1.end(), ostream_iterator<int>(cout," "));
    cout << endl;

    for (i1 = v1.begin(); i1 != v1.end(); ++i1)
        *i2++ = *i1;

    for (i1 = v1.begin(); i1 != v1.end(); ++i1)
        *i3 = *i1;
    cout << endl;

    for (i1 = v1.begin(); i1 != v1.end(); ++i1)
        *i3++ = *i1;
    cout << endl;

    my_copy(q2.begin(), q2.end(), i3);
    cout << endl;

    return 0;
}

/* output
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
0 1 2 3 4 5 6 7 8 9 
9 8 7 6 5 4 3 2 1 0 
*/