C++的输入输出由标准库提供。标准库定义了一族类型,支持对文件和控制窗口等设备的读写,还定义了其他一些类型,使string对象能够像文件一样操作,从而使我们无须IO就能实现数据与字符之间的转换。IO类型在三个独立的头文件中定义,iostream定义读写控制窗口的类型,fstream定义读写已命名文件的类型,而sstream所定义的类型则用于读写存储在内存中的stream对象。首先看一下各个类之间的继承关系:
使用流应该注意到的问题有:
1. IO对象不可复制或赋值。
这表示:(1)由于只有支持复制的元素类型可以存储在vector或其他容器里,因此vector不能存储在vector或其他容器中。(2)形参或返回类型也不能为流类型,如果需要传递或返回IO对象,则必须传递或返回该对象的指针或引用。(怪不得我印象中看到的函数参数都是istream&这样子的)
2. 流的条件状态
可以如下管理输入操作:
int ival;
while( cin>>ival, !cin.eof() ){
if( cin.bad() )
throw runtime_error( "IO stream corrupted" );
if( cin.fail() ){
cerr << "bad data, try again";
cin.clear( istream::failbit);
continue;
}
//ok to process ival
}
3. 输出缓冲区的管理
cout << "hi!" << flush; //flushes the buffer, adds no data
cout << "hi!" <<endl; //inserts a newline then flushes
cout << "hi!" <<ends; //inserts a null, then flushes
cout << unibuf << "first" << "second" <<nounibuf;
//equivalent to :
cout << "first" << flush << "second" << flush;
//ties a i/o stream to an o/i stream
cin.tie(&cout);
cin.tie(0); //break tie to cout
4. 文件流
文件流必须跟某一特定文件绑定(通过文件名),可以在初始化时绑定,也可以在后期open的时候绑定。
ifstream infile( ifile.c_str() ); //ifile is a string object
ofstream outfile;
outfile.open( "out" ); //associates a file when open
//check if the file is successfully opened
if( !infile ){
//the file is not opened to use
}
//re-associate the stream with a new file
infile.close();
infile.open( "next" );
//clear the state of the stream
//files is a vector that stores names of the files, it is an iterator from begin
ifstream input;
vector<string> :: const_iterator it = files.begin();
while( it != files.end() ){
input.open( it->c_str() );
if( !input )
break;
while( input >> s )
process(s);
input.close();
input.clear(); //clear the state of the stream
++it;
}
5. 文件模式
在打开文件时,无论是调用open还是以文件名作为流初始化的一部分,都需指定文件模式。每个fstream类都定义了一组表示不同模式的值,用于指定流打开的不同模式。如下:
out、trunc、app模式只能用于指定与ofstream或fstream对象关联的文件;in模式只能用于指定与ifstream或fstream对象关联的文件。所有的文件都可以用ate或binary模式打开。ate模式只有在打开时有效:文件打开后将定位在文件尾。
6. 字符串流
字符串流为字符串的操作提供了更加自由方便的处理方法,把字符串保存在字符串流中,就相当于把数据缓存起来,然后可以再次作为输入,决定处理方式。例如,我们需要读取一行数据,然后再对这行数据进行逐个处理;或者是将字符串进行转换或格式化。
//片断一:处理行,再处理行中的每个单词
string line, word;
while( getline(cin, line) ){
istringstream stream(line);
while( stream >> word )
process(word);
}
//片断二:字符串流提供的格式转换
int val1 = 300, val2 = 400;
ostringstream format_message;
format_message << "val1: "<<val1 << "\n"
<< "val2: "<<val2 << \n";
istringstream input_istream( format_message.str() );
string dump;
input_istream >> dump >> val2 >> dump >> val1;
cout<< val1 << " " << val2 <<endl;
- 大小: 31.2 KB
- 大小: 79 KB
- 大小: 24.1 KB
分享到:
相关推荐
这本书名为《C++ Premier》第四版的中文版,意味着它是一本专门介绍C++编程语言的书籍,并且是针对中文读者进行编写的版本。C++是一种广泛使用的、面向对象的编程语言,由Bjarne Stroustrup在20世纪80年代初基于...
"CPP-Premier-Plus.zip_plus_销售"这个标题可能指的是该书的配套资源,特别是针对学习者或教师的补充材料,可能是课后习题的答案,或者是用于教学辅助的资料,旨在帮助读者更好地理解和掌握C++编程。 描述中提到的...
c++ premier 是学习c++的经典著作,通过学习这本数,你可以有很大进步;本资源是书本对应的习题解答,第四版,相当详细
C++不仅保留了C语言的效率和灵活性,还引入了类、模板、异常处理、命名空间等面向对象的概念,以及泛型编程和 STL(标准模板库)等现代C++特性。 《C++ Primer》第四版中英文对照_chm.chm文件是一个压缩包,其中...
C++标准IO库,通过C++标准输入输出流对控制窗口,磁盘文件字符串流进行控制。内容也包含条件状态,文件模式等内容。
总的来说,《2017-NESC-handbook-premier-edition.pdf》是电力行业的重要参考资料,它不仅提供了全面的安全规定,还为实际操作提供了详细指导,对于理解和执行电气安全标准至关重要。无论是专业人员还是行业新手,都...
7. **标准库的使用**:C++标准库包含了许多有用的容器(如vector、list、set)、算法(如排序、搜索)和实用工具(如字符串、智能指针)。学习如何有效利用标准库是提高编程效率的关键。 8. **实践项目**:C++ ...
Premier - MS Windows Shell Script Programming for the Absolute Beginner.chm
《C++ Primer 第四版》的习题涵盖广泛,从基础语法到面向对象编程,再到STL(标准模板库)和泛型编程,都有所涉及。习题解答提供了正确答案和思路,有助于读者自我检查,理解错误之处,并学习如何解决实际问题。 源...
《Premier - Crystal Reports 9 Essentials》是一本深入解析Crystal Reports 9这一强大报表工具的教程,旨在帮助用户掌握其核心功能与应用技巧。Crystal Reports是Business Objects公司(现为SAP的一部分)开发的一...
总理眼物体检测程序 开始工作之前,Premier-eye需要在设备上创建数据和输出文件夹,并将图像放置在此处以进行识别工作。物体检测模块当地使用要求: Python> = 3.6 对于运行模块,您需要运行API和SPA来发送数据,...
oracle ebs
附件的内容为使用思维导图XMind总结C++标准库的顺序容器,通过把C++ Premier顺序容器翔实的放在一张图片上,可以非常方便的梳理思路,在工作中也能提高工作效率。灵活的使用容器是C++开发人员必须具备的技能
XMind是一个非常神奇的软件,能够帮助我们组织思考,很不错的工具。C++ Premier是非常成熟的开发语言讲解书籍,非常经典
使用XMind学习C++Premier.好好学习好好工作aaaaaaaaa阿凡达附加库撒地方就是扩大了房价数据奥凯电缆飞机撒看到