输入语句
1、对于控制台的Input操作
对于控制台的Input操作,C++标准在#include<iostream>
中提供了cin
这一对象,提供输入操作。
istream& operator>>(istream&, T &);
这里就是cin
所属的istream
类的重载的函数。我们可以通过这种方式来进行数据输入。
常用用法 cin >> a >> b >> ... >> n;
这里的a,b,c,...,n
可以是格式控制符,也可以是变量。
关于格式控制符,可以看这里(重点!!!)
由于istream
类是采用模板定义的第二个参数,所以通过cin >> a
几乎可以完成任何常见类型的数据的读入。包括但不限于int,double,char,char[],long long
。很方便。
但是! C++的istream
类的底层还是通过C语言的cstdio
头文件里的scanf()
实现的,所以其效率较低,当数据读入量很大的时候甚至读入就会超时!
所以,当我们不需要读入string
类的变量的时候,推荐还是不要使用cin
,而是使用scanf()
2、对于文件Input
对于文件输入输出,一般我们绝不会使用cin
+freopen()
的组合。由于cin
与scanf()
等函数是共用一个stdin
的接口,cin
的输入要配合scanf()
,中间有个缓冲区,从而导致其非常慢。当然,我们也可以采用std::ios::sync_with_stdio(false)
这一函数关闭掉cin
与scanf()
的同步,但是在实际测试中,它的效果因机器而异,效果并不好,故我们一般不使用这种操作。
我们一般使用fstream
中定义的ifstream
类进行文件读入操作。基本用法是:
#include<fstream>
using namespace std;
ifstream fin("xxx.in");//声明变量
int main()
{
int a;
fin >> a;//和cin很像,进行读入操作
return 0;
}
嗯,这样就好。
和cin
一样,它的效率没有scanf()
+freopen()
高。
输出语句
1、对于控制台的Output操作
对于控制台的Output操作,C++标准在#include<iostream>
中提供了cout
这一对象,提供输入操作。
ostream& operator<<(ostream&, T &);
这是cout
所属的ostream
类的重载的函数。我们可以通过这种方式来进行数据输入。
常用用法 cout << a << b << c;
这里的a,b,c,...,n
可以是格式控制符,也可以是变量,还可以是一些常量。
关于格式控制符,可以看这里(重点!!!)
由于ostream
类是采用模板定义的第二个参数,所以通过cout << a
几乎可以完成任何常见类型的数据的输出。包括但不限于int,double,char,char[],long long
。很方便。
但是! C++的ostream
类的底层还是通过C语言的cstdio
头文件里的printf()
实现的,所以其效率较低,当数据读入量很大的时候甚至输出就会超时!
所以,当我们不需要输出string
类的变量的时候(其实输出它时也可采用printf("%s", str.c_str())
),推荐还是不要使用cout
,而是使用printf()
2、对于文件Output
对于文件输入输出,一般我们绝不会使用cout
+freopen()
的组合。由于cout
与printf()
等函数是共用一个stdout
的接口,cout
的输入要配合printf
,中间有个缓冲区,从而导致其非常慢。当然,我们也可以采用std::ios::sync_with_stdio(false)
这一函数关闭掉cout
与printf()
的同步,但是在实际测试中,它的效果因机器而异,效果并不好,故我们一般不使用这种操作。
我们一般使用fstream
中定义的ofstream
类进行文件读入操作。基本用法是:
#include<fstream>
using namespace std;
ofstream fout("xxx.out");//声明变量
int main()
{
int a = 100;
fout << a;//和cout很像,进行读入操作
return 0;
}
同样,它的效率没有printf()
+freopen()
高