zoukankan      html  css  js  c++  java
  • 《C++Primer》复习——with C++11 [3]

    1.我们的程序经常使用很多IO库,用来输入输出例如:istream(输入流)类型,提供输入操作。

    ostream(输出流)类型, 提供输出操作。

    cin, 一个istream对象,从标准输入读取数据。

    cout,一个ostream对象,向标准输出写数据。

    cerr, 一个ostream对象,通常用于输出程序错误消息,写入到标准错误。

    >>/<<运算符,用来从一个istream/ostream对象输入输出数据。

      不能对IO对象拷贝和赋值,由于不能拷贝IO对象,因此不能将形参或返回类型设置为流类型。进行IO操作的函数通常以引用方式传递和返回流。读写一个IO对象会改变其状态,因此传递和返回的引用时不能const的。    

      刷新输出缓冲区:之前通过操纵符endl完成换行并刷新缓冲区,两个类似的操作flush 和ends,flush刷新缓冲区,但不输出任何额外的自符,ends向缓冲区输出一个空字符并且刷新缓冲区。

      tie方法可以将一个流关联到另外一个流,例如:cin.tie(&cout);  ostream *old_tie = cin.tie(nullptr);

    cin.tie(&cerr);   cin.tie(old_tie);

    2.文件的输入和输出,头文件fstream定义了三个类型来支持文件,IO:ifstream从一个给定文件读取数据,ofstream向一个给定的文件写入数据,以及fstream可以读写给定文件。

    1 fstream fstrm; //创建一个未绑定的文件流
    2 fstream fstrm(s); //创建一个fstream,并打开名为s的文件,s可以使string类型,或者是一个纸箱C风格字符串的指针。
    3 fstream fstrm(s, mode);//指定mode打开文件
    4 fstream.open(s); //打开名为s的文件,并将文件与fstrm绑定。s可以使一个string或者一个纸箱C风格的字符串指针,默认的mode依赖于fstream的类型
    5 fstrm.close(); 关闭与fstrm绑定的文件
    6 fstrm.is_open(); //返回一个bool,之处与fstrm关联的文件是否打开成功且尚未关闭
    1 ifstream in(ifile);
    2 ofstream out;
    3 out.open(ifile + ".copy");

    当一个fstream对象销毁时,close会自动的被调用

    3.文件模式,每个流都有一个关联的文件模式,用来之处如何使用文件,下表列出了文件模式和他们的含义

    in                    以读方式打开
    out                  以写方式打开
    app                 每次写操作前军定位到文件末尾
    ate                  打开文件后立即定位到文件末尾
    trunc               截断文件
    binary             以二进制方式进行IO

    以out模式打开文件会丢失已有数据,默认情况下,我们打开一个ofstream时,文件的内容会被丢弃,组织一个ofstream清空给定文件内容给定方法是同事指定app模式。

    //在这几条语句中,file1都会被截断
    ofstream out("file1"); //隐含以输出模式打开文件并截断文件
    ofstream out2("file1", ofstream::out); //隐含的截断文件
    ofstream out3("file1", ofstream::out | ofstream::trunc);
    //为了保留文件内容,显示指定app模式
    ofstream app("file2", ofstream::app); //隐含为输出模式
    ofstream app2("file2", ofstream:: out | ofstream::app);

    每次调用open都会确定文件模式,对于一个流,每当打开文件时,都可以改变其文件模式。

    fstream out; //未指定打开模式
    out. open("scratchpad");//模式隐含设置为输出和截断
    out. close();
    out.open("precious", ofstream::app); //模式为输出和追加

    4.istringstream和ostringstream绑定一个string对象,这个对象可用<<和>>方法来输入获取一个string对象中的内容,它就像一块和string绑定的内存区域,当你使用>>方法则向其中写入C风格字符串或者string,它也向一个缓冲区,暂时容纳你的输入和输出,然后调用他的str方法返回这个整片的字符串。两个例子如下:

     1 struct PersonInfo
     2 {    string name;
     3       vector<string> phone;
     4 };
     5 string line, word;
     6 vector<PersonInfo> people;
     7 while (getline(cin, line))
     8 {    PersonInfo info;
     9       istringstream record(line);
    10       record >> info.name;
    11       while (record >> word)
    12             info.phones.push_back(word);
    13       people.push_back(info);
    14 }
     1 for (const auto &entry : people)
     2 {   ostringstream formatted, badNums;
     3      for (const auto &nums : entry.phones)
     4      {    if (!valid(nums)) {
     5                badNums << " " << nums;
     6             }else
     7                 formatted << " " << format(nums);
     8       }
     9       if (badNums.str().empty())
    10            os << entry.name << " " << formated.str() << endl;
    11       else
    12             cerr <<.......
    13 }
  • 相关阅读:
    Sass变量、嵌套
    遮罩层2
    遮罩层
    大图轮播
    项目资料(主页)
    关于时间控制和制定时间日期
    dom作业
    js的dom操作和函数
    js数组去重
    js For循环练习。
  • 原文地址:https://www.cnblogs.com/changme/p/4046629.html
Copyright © 2011-2022 走看看