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;
}