C++输入输出迭代器

C++输入输出可以使用cin,cout,也可以使用C语言的scanf和printf。这里介绍使用输入输出迭代器进行输入输出。

迭代器
迭代器代表广义指针,可以完成常规指针的所有操作。C++的STL定义了5中迭代器:(1)输入迭代器。(2)输出迭代器。(3)正向迭代器。(4)双向迭代器。(5)随机访问迭代器。这些包含在头文件iterator中。
输入迭代器
输入迭代器指向某个输入流,因此可以用输入迭代器进行程序的输入。
输入迭代器的定义方式:istream_iterator<int,char> 。其中第一个参数指出要读取的数据类型,第二个参数指出输入流要使用的类型为字符。在定义一个输入迭代器变量时,可以通过构造函数指定该变量指向的输入流。输入流可以是cin,也可以是文件,也可以是某个容器。
通过输入迭代器从cin中读取一个int,这里使用了typedef。
#include<iostream>
#include<cstdio>
#include<iterator>
#include<fstream>
#include<string>
using namespace std;
typedef istream_iterator<int, char> input_int;		//读取int
typedef istream_iterator<char, char> input_char;	//读取char
typedef istream_iterator<string, char> input_string;//读取string

int main()
{
	input_int input1(cin);
	int n = *input1;
	cout << n << endl;

	return 0;
}
定义input1为指向cin的输入流的迭代器,则根据*可以将input1指向的数据赋给n,实现数据输入的功能。
若只输入一次,还可以使用临时变量:
#include<iostream>
#include<cstdio>
#include<iterator>
#include<fstream>
#include<string>
using namespace std;
typedef istream_iterator<int, char> input_int;		//读取int
typedef istream_iterator<char, char> input_char;	//读取char
typedef istream_iterator<string, char> input_string;//读取string

int main()
{
	int n = *(input_int(cin));
	cout << n << endl;

	return 0;
}
还可以在输入多种类型,只要定义相应的迭代器就可以了。注意对于输入迭代器的++操作,相当于输入数据。
#include<iostream>
#include<cstdio>
#include<iterator>
#include<fstream>
#include<string>
using namespace std;
typedef istream_iterator<int, char> input_int;		//读取int
typedef istream_iterator<char, char> input_char;	//读取char
typedef istream_iterator<string, char> input_string;//读取string

int main()
{
	input_int input1(cin);			//输入int的迭代器

	int data_int;
	char data_char;
	string data_string;

	data_int = *input1;		//输入一个int
	cout << data_int << endl;

	input_char input2(cin);		//输入char的迭代器
	data_char = *input2;		//输入两次
	cout << data_char << endl;
	input2++;			//input2++代表再输入一次
	data_char = *input2;
	cout << data_char << endl;

	input_string input3(cin);		//输入string的迭代器
	data_string = *input3;
	cout << data_string << endl;

	return 0;
}
最好在输入某个新类型的时候,才定义相应的迭代器。因为这样才能使得迭代器指向正确的地方。
输出迭代器
输出迭代器的定义方法:ostream_iterator<int,char>。第一个参数int指出送到输出流的类型为int,第二个参数表示输出流使用的类型是char。输出迭代器的构造函数的第二个参数表示分隔符,即每次输出完之后,都要输出的一个字符。如果省略第二个参数,表示没有分隔符。以下的例子表示每次输出一个数据都输出一个\n。
#include<iostream>
#include<cstdio>
#include<iterator>
#include<fstream>
#include<string>
using namespace std;
typedef istream_iterator<int, char> input_int;		//读取int
typedef istream_iterator<char, char> input_char;	//读取char
typedef istream_iterator<string, char> input_string;//读取string
typedef ostream_iterator<int, char> output_int;		//输出int
typedef ostream_iterator<char, char> output_char;	//输出char
typedef ostream_iterator<string, char> output_string;//输出string

int main()
{
	input_int input1(cin);			//输入int的迭代器
	output_int output1(cout, "\n");

	int data_int;
	char data_char;
	string data_string;

	data_int = *input1;		//输入一个int
//	cout << data_int << endl;
	*output1 = data_int;

	input_char input2(cin);		//输入char的迭代器
	output_char output2(cout, "\n");
	data_char = *input2;		//输入两次
//	cout << data_char << endl;
	*output2 = data_char;
	input2++;			//input2++代表再输入一次
	output2++;
	data_char = *input2;
//	cout << data_char << endl;
	*output2 = data_char;

	input_string input3(cin);		//输入string的迭代器
	output_string output3(cout, "\n");
	data_string = *input3;
//	cout << data_string << endl;
	*output3 = data_string;

	return 0;
}
输出迭代器一般可以使用临时版本:
#include<iostream>
#include<cstdio>
#include<iterator>
#include<fstream>
#include<string>
using namespace std;
typedef istream_iterator<int, char> input_int;		//读取int
typedef istream_iterator<char, char> input_char;	//读取char
typedef istream_iterator<string, char> input_string;//读取string
typedef ostream_iterator<int, char> output_int;		//输出int
typedef ostream_iterator<char, char> output_char;	//输出char
typedef ostream_iterator<string, char> output_string;//输出string

int main()
{
	input_int input1(cin);			//输入int的迭代器
//	output_int output1(cout, "\n");

	int data_int;
	char data_char;
	string data_string;

	data_int = *input1;		//输入一个int
//	cout << data_int << endl;
//	*output1 = data_int;
	*(output_int(cout, "\n")) = data_int;

	input_char input2(cin);		//输入char的迭代器
//	output_char output2(cout, "\n");
	data_char = *input2;		//输入两次
//	cout << data_char << endl;
//	*output2 = data_char;
	*(output_char(cout, "\n")) = data_char;
	input2++;			//input2++代表再输入一次
//	output2++;
	data_char = *input2;
//	cout << data_char << endl;
//	*output2 = data_char;
	*(output_char(cout, "\n")) = data_char;

	input_string input3(cin);		//输入string的迭代器
//	output_string output3(cout, "\n");
	data_string = *input3;
//	cout << data_string << endl;
//	*output3 = data_string;
	*(output_string(cout, "\n")) = data_string;

	return 0;
}







  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值