istream_iterator与ostream_iterator

注意点:

  • 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 次即可;

猜你喜欢

转载自blog.csdn.net/pix_csdn/article/details/89961799
今日推荐