注意点:
-
istream_iterator
// 执行此句时会等待一个输入 istream_iterator<int> iptr(cin), eof; // 执行此句后,相当于再等待一个新的输入 iptr++;
-
ostream_iterator
// 执行此句时不会产生输出 // 需要一个输出的类型转换 // int → char 等 ostream_iterator<int, char> optr(cout, "\n");
以上就是两者用法的区别。
这里提供两种istream_iterator的用法:
- 输入直到eof
- 输入n个内容
具体程序如下:
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main(){
// eof结束
cout << "Enter numbers:\n";
vector<int> v_num;
istream_iterator<int> input_num(cin), eof;
ostream_iterator<int, char> output_num(cout, " ");
while (input_num != eof)
v_num.push_back(*input_num++);
// 输出v_num内容
cout << "\ninput numbers: \n";
copy(v_num.begin(), v_num.end(), output_num);
cout << endl << endl;
// 输入n个字符串
cin.clear();
cout << "Enter n:\t";
int n;
cin >> n;
cout << "\nEnter n strings:\n";
vector<string> v_str;
istream_iterator<string> input_str(cin);
ostream_iterator<string, char> output_str(cout, "\n");
v_str.push_back(*input_str);
for (int i = 1; i < n; ++i)
v_str.push_back(*++input_str);
// 输出v_str内容
cout << "\ninput strings: \n";
copy(v_str.begin(), v_str.end(), output_str);
return 0;
}
- EOF 式输入注意定义一个 eof;
- EOF 输入结束之后需要 cin.clear( ) 才可以继续输入;
- 输入n个字符串,定义 input_str(cin) 时需要一个输入;
- 所以输入完之后应该先 push_back;
- 之后 ++input_str 、push_back 执行 n − 1 n - 1 n−1次即可;