显示屏抖动-老毛桃u盘启动制作工具

2023年4月4日发(作者:securable)
C++
标准库之
iostream
库的学习笔记(一)
iostream
库的介绍和
istream,ostream
类以
及cin,cout对象
c语言的标准输入输出库是stdio.h是一个函数库而不是类库。
其中包括了我们最常使用的scanfprintf都是一些独立的全局函数,因为C语言是不支持类的。
c++的标准输入输出库iostream是一个类库,以类的形式组织,使用该库中的类要先引用命名空
间:usingnamespacestd;
最常使用的是cin和cout,这两个都是对象,cin是istream类的对象,cout是ostream类的对
象,而输入的cin>>与输出时的cout<<中的左移<<与右移>>分别是istream类与ostream类
的操作符重载。
iostream库里面创建了3个标准流对象:
1cin表示标准输入的istream对象,cin可以使我们从设备读取数据。
2cout表示标准输出的ostream对象,cout可以使我们向设备写入数据。
3cerr表示标准错误的ostream对象,cerr是导出程序错误消息的地方,只能向屏幕设备写数据。
标准的流对象都有默认的设备:
cout<
cin>>data;cin默认的设备是键盘缓冲区。
iostream库由以下几个库组成:fstream,iomainip,ios,iosfwd,iostream,istream,ostream,
sstream,streambuf,strstream。
istream用来访问操作系统的输入流,ostream访问操作系统的输出流,iostream同时继承了这两
个类。
在ostream类中,重载了许多的左移<<操作符,对每种基本数据类型都做了重载,比如
&ostreamoperator<<(ostream&temp,intsource);
&ostreamoperator<<(ostream&temp,charsource);
&ostreamoperator<<(ostream&temp,char*source);
由于以上重载返回的数据类型都是ostream的引用,ostream又可以作为左值,所以可以实现
cout<<"abc"<
同样在istream类中,也重载了许多右移>>操作符,对每种基本数据类型都做了重载,比如
&istreamoperator>>(istream&temp,intsource);
&istreamoperator>>(istream&temp,charsource);
以上是终端标准输入输出设备的输入输出,也就是一般pc机的键盘和显示器的输入输出。
C++标准库之iostream库的学习笔记(二)fstream库以及ofstream类的使用
iostream库不仅支持终端设备的输入输出,还支持文件的输入输出,和文件有关的输入输出类声明
在fstream头文件中,有三个类负责文件的输入输出
1)ifstream类:从istream类派生。
2)ofstream类:从ostream类派生。
3)fstream类:从iostream类派生。
由于文件的输入输出和键盘鼠标的输入输出是不一样的,一般pc机只有一个键盘设备,所以
iostream库内部声明了一个istream类的对象cin,这个对象负责从键盘获取数据,而文件设备在
系统中是由许多的,所以iostream库内部无法给你为机器的每个文件都创建一个负责获取数据的
ifstream对象和负责写入数据的ofstream对象,所以我们要针对一个文件进行读取或写入数据的
时候都要自己创建一个ifstream或ostream类的对象来用。
ofstream类的默认构造函数如下:
ofstream::ofstream(constchar*filename,intmode=ios::out,intopenport=
filebuf::openport);
filename是要打开的文件名,
mode是打开的方式,
openport是打开文件的属性。
mode可以设置的方式如下:
ios::app以追加的方式打开
ios::ate文件打开后定位到文件尾
ios::binary以二进制方式打开文件,默认是以文本方式打开
ios::in文件以读(输入)方式打开
ios::out文件以写(输出)方式打开
ios::trunc如果文件存在,则把文件清空。
以上属性用“|”(按位或)连接起来。
openprot属性如下:
0普通文件
1只读文件
2隐含文件
4系统文件
以上属性可以用加或者按位或方式组织起来,比如1|2和3都代表既是只读又是隐含文件。
在windows操作系统中可以不要第三个参数,如果加入第三个参数,那第三个参数是打开文件的共
享方式,也就是打开这个文件时,其他进程是否可以读写该文件。
共享方式参数可以是下面的值:
0x10//_SH_DENYRWDeniesreadandwriteaccessto
thefile
0x20//_SH_DENYWRDenieswriteaccesstothefile
0x30//_SH_DENYRDDeniesreadaccesstothefile.
0x40//_SH_DENYNOPermitsreadandwriteaccess
其他值都会报"Invalidsharingflag"的错误。
ofstreamhFile("c:",ios::out,_SH_DENYRW);//_SH_DENYRWisdeny
readandwrite
if(!hFile)//ifthefilecouldopen,hFileisahandle,elseiszero
{
cout<<"writefail!"<
cout<<"accessisdenies,maybethefileisreadonlys,orusedenyread
openedofotherprocess."<
}
else
{
hFile<<"bycoderleewrites";
cout<<"writesuccess!"<
}
();//openedfileneedclose.
上面是写文件的事例代码,先打开文件,然后判断是不是0,如果是0,则提示writefail否则写文件,
提示writesuccess.
C++标准库之iostream库的学习笔记(三)ifstream类的使用和介绍
该继续看ifstream类了。
ifstream继承自istream类,istream类只有一个iostream库中创建好的cin对象,对应一个输
入设备就是pc机的键盘,而ifstream类则没有在fstream中有创建好的对象,原因上一篇文章已
经说了。
ifstream是文件输入类,输入的源是文件,目标是内存,从文件向内存输入,也就是读取文件的意
思了。
如果想读取一个文件,简单的示例代码如下:
#include
#include
#include
usingnamespacestd;
int_tmain(intargc,_TCHAR*argv[])
{
ifstreamhFileRead("c:",ios::in,_SH_DENYRW);//deniesreadandwrite
if(!hFileRead)
{
cout<<"readfail!"<
exit(1);
}
charch;
stringcontent;
while((ch))//thegetmethodretuanfalseonreadend
{
content+=ch;//stringsupportoprator+=,useoverload
(ch);
}
system("pause");//otherprocesscan'treadorwritethefile
();
system("pause");
return0;
}
get方法会读取一个字符,当读到文件末尾就会返回false。
并且示例了_SH_DENYRW的共享方式打开文件的后果,在第一个暂停处无法打开c:,当调
用close才可以正常打开。
主要工作函数:
get
getline
read
另外有几个辅助函数:
peek
putback
ignore
gcount
seekg
seekdir
tellg
实际开发过程中使用std::getline这个全局函数来获取一行字符,使用如下:
#include
#include
#include
usingnamespacestd;
int_tmain(intargc,_TCHAR*argv[])
{
fstreamhFile;
("c:",ios::out|ios::in,_SH_DENYWR);//onlydenywrite
stringstr;
while(std::getline(hFile,str))
cout<
();
();
return0;
}
C++标准库之iostream库的学习笔记(四)fstream类的使用和总结文件IO
fstream类可以读也可以写,继承了ifstream和ofstream两个类的功能。
在做文件I/O的时候,一般的操作也就是
1打开文件:输出out,输入in,打开时清空trunc,追加方式app
2读取字符,读取行:getch,getline
3写入字符,写入行:put,oprator<<
4判断是否是文件末尾:eof()
5将文件缓冲区内容更新到文件:flush()
6文件流读指针的获取和设置:tellg()seekg()
7文件流写指针的获取和设置:tellp()seekp()
ifstream只支持tellgseekgg->get
ofstream支持tellpseekpp->put
fstream两个都支持,而且是联动的,移动读指针,写指针随之移动,移动写指针,读指针也会随之
移动。
还有就是假若当前文件流的状态是eof,再移动读指针seekg(),将不起作用,必须先调用clear清
除eof状态,才能使用seekg移动写指针。
还有std命名空间有一个全局函数getline可以支持读入到std::string,而不用再使用
e(char*,ncount)然后将char*转换为string。
就这些iostream还有许多需要注意的地方与陷阱,先挖掘到这里,继续学习下一章,不能无限的深
入在一个知识点去钻牛角间,会用即可,以后遇到特殊需要再回过头来深入学习。
更多推荐
includeiostream
发布评论