以文本方式查看主题

-  计算机科学论坛  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  有没有懂STL的,有一个STL语法不太懂  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=40588)


--  作者:flyfoxs
--  发布时间:11/27/2006 10:04:00 PM

--  有没有懂STL的,有一个STL语法不太懂
// name:example2_3.cpp
// alias:aesthetic version
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
void main(void){ 
 typedef vector<int> int_vector; 
 typedef istream_iterator<int> istream_itr; 
 typedef ostream_iterator<int> ostream_itr;
 typedef back_insert_iterator< int_vector > back_ins_itr; 

 // STL中的vector容器 
 int_vector  num;
 
 // 从标准输入设备读入整数,
 // 直到输入的是非整型数据为止
 copy(istream_itr(cin),  istream_itr(), back_ins_itr(num));
 // STL中的排序算法 
 sort(num.begin(), num.end()); 
 // 将排序结果输出到标准输出设备 
 copy(num.begin(), num.end(), ostream_itr(cout, "\n"));

 }     


istream_iterator便是一个适配器,它将cin进行包装,使之看起来像是一个普通的迭代器,这样我们就可以将之作为实参传给一些算法了(比如这里的copy算法)。因为算法只认得迭代器,而不会接受cin。对于上面程序中的第一个copy函数而言,其第一个参数展开后的形式是:istream_iterator(cin),其第二个参数展开后的形式是:istream_iterator()(如果你对typedef的语法不清楚,可以参考有关的c++语言书籍)。其效果是产生两个迭代器的临时对象,前一个指向整型输入数据流的开始,后一个则指向"pass-the-end value"。这个函数的作用就是将整型输入数据流从头至尾逐一"拷贝"到vector这个准整型数组里,第一个迭代器从开始位置每次累进,最后到达第二个迭代器所指向的位置。


问题:其第二个参数展开后的形式是:istream_iterator()其效果是产生一个指向整型输入数据流的"pass-the-end value"?
       这个是怎么产生的?它没有输入任何参数,根本就不知道是哪个流?


W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
1,039.063ms