zoukankan      html  css  js  c++  java
  • C++标准库概述

    一、C++标准库的主要组件:

    1、标准C库

    2、I/O流技术(对标准输入输出设备称为标准I/O,对在外磁盘上文件的输入输出称为文件I/O,对内存中指定的字符串存储空间的输入输出称为串I/O)

    3、string类模版

    4、容器(vector、list、queue、stack、deque、map、set和bitset)

    5、算法

    6、对国际化的支持

    7、对数字处理的支持

    8、诊断支持(3中报错方式:C的断言、错误号、例外)

    二、I/O流技术

    C++为实现数据的输入输出定义了一个庞大的类库,它包括的类主要有ios、istream、ostream、iostream、ifstream、ofstream、fstream、istrstream、ostrstream、strstream等,其中ios为根基类,其余的都是它的直接或者间接派生类。

    ios直接派生四个类:输入流iostream、输出流ostream、文件流基类fstream和字符串基类strstream.

    通过上面的介绍很容易理解C++中的I/O流库都包含在iostream、fstream、strstream这三个类库文件中。

    C++不仅仅提供了上面的三个类库,还为用户提供了提供了标准I/O操作中的类对象,分别是cin、cout、cerr、clog

    格式控制操作符:

    #include <iostream> //其实iomanip中包含iostream,所以该行可省略
    #include <iomanip>
    using namespace std;
    
    int main(){
        int x = 30, y = 300, z = 1024;
        cout << x << ' ' << y << ' ' << z << endl;
        //八进制输出
        cout << oct << x << ' ' << y << ' ' << z << endl;
        //十六进制输出
        cout << hex << x << ' ' << y << ' ' << z << endl;
        //设置提示符和字母大写输出
        cout << setiosflags(ios::showbase | ios::uppercase);
        cout << x << ' ' << y << ' ' << z << endl; 
        cout << resetiosflags(ios::showbase | ios::uppercase);
        cout << x << ' ' << y << ' ' << z << endl;
        //按十进制输出
        cout << dec << x << ' ' << y << ' ' << z << endl;
    
        return 0;
    }
    自定义流操作符:

    #include <iostream>
    using namespace std;
    
    ostream &lin(ostream &myos){
        return myos << "
    -----------------";
    }
    
    int main(){
        cout << lin << lin << lin << endl;
        return 0;
    }
    I/O操作符重载:

    #include <iostream>
    #include <string.h>
    using namespace std;
    
    class Student{
        friend ostream& operator << (ostream& ot, Student& popup);
        char name[10];
        unsigned int age;
        unsigned long num;
    public:
        Student(char *na, unsigned int al, unsigned long number):age(al),
            num(number){
            strcpy(name, na);
        }   
    };
    
    ostream& operator << (ostream& ot, Student& popup){
        ot << "Name:" << popup.name << endl << "Age:" << popup.age << endl
            << "Number:" << popup.num << endl << "---------------------" << endl;
        return ot; 
    }
    
    int main(){
        Student a("Wang", 18, 1234), b("zhao", 19, 4312), c("liu", 20, 2341);
        cout << a << b << c;
    
        return 0;
    }
    写入文件:

    #include <iostream>
    #include <stdlib.h>
    #include <fstream>
    using namespace std;
    
    int main(void){
        //定义输出文件流,并打开相应的文件
        ofstream f1("a:wr1.dat");
        if(!f1){
            cerr << "a:wr1.data file not open!" << endl;
        }   
        for(int i=0; i<21 ; i++){
            f1 << i << ' ';
        }   
        f1.close();
        return 0;
    }
    读文件内容:

    #include <iostream>
    #include <std.ib.h>
    #include <fstream>
    
    int main(){
        //规定打开的文件时输入文件,若文件不存在则返回打开失败信息
        ifstream f1("wrl.dat", ios::in | ios::nocreate);
        //当f1打开失败时进行错误处理    
        if(!f1){
            cerr << "wr1.data file not open!" << endl;
            exit(1);
        }   
        int x;
        while(f1 >> x)
            cout << x << ' ';
        cout << endl;
        f1.close();
    
        return 0;
    }
    输入输出流操作:

    #include <iostream>
    #include <strstream>
    using namespace std;
    
    int main(){
        char a[50];
        char b[50];
        istrstream sin(a); //定义一个输入字符串流sin,使用的字符数组为a
        //定义一个输出字符串流sout,使用的字符数组为b
        ostrstream sout(b, sizeof(b));
        //从键盘上输入字符
        cin.getline(a, sizeof(a));
        char ch = ' ';
        int x;
        while(ch !='@'){
            //使用'@'字符作为字符串流结束标志
            if(ch >= 48 && ch <= 57){
                //将字符压入流中
                sin.putback(ch);
                sin >> x;
                //存入输出流
                sout << x << ' ';
            }
            //每次取出一个字符
            sin.get(ch);
        }
        sout << '@' << ends;
        //输出输出流的内容
        cout << b;
        cout << endl;
    
        return 0;
    }
    构造字符串:

    #include <string>
    #include <iostream>
    using namespace std;
    
    int main(){
        string Mystring1(10, ' ');
        string Mystring2 = "This is a string";
        string Mystring3(Mystring2);
        cout << "string1 is : " << Mystring1 << endl;
        cout << "string2 is : " << Mystring2 << endl;
        cout << "stirng3 is : " << Mystring3 << endl;
    
        return 0;
    }

    字符串判断函数:

    1、empty()

    2、length()

    3、resize()改变长度

    #include <iostream>
    #include <string>
    using namespace std;
    
    int main(){
        string TestString = "ll11223344565666";
        cout << TestString << "
     size: " << TestString.length() << endl;
        TestString.resize(5);
        cout << TestString << "
     size: " << TestString.size() << endl;
        TestString.resize(10);
        cout << TestString << "
     size: " << TestString.size() << endl;
        TestString.resize(15, '6');
        cout << TestString << "
     size: " << TestString.size() << endl;
    
        return 0;
    }
    4、append()

    5、c_str()

    #include <string>
    #include <iostream>
    using namespace std;
    
    int main(){
    
        string str1("012");
        string str2("345");
        cout << "str1 = " << str1.c_str() << endl;
        cout << "str2 = " << str2 << endl;
        //把字符串str2增加到str1尾部
        str1.append(str2);
        cout << "str1 = " << str1 << endl;
        //返回的是一个常量指针
        const char* ch = str1.c_str();
        for(int i=0; i<str1.length(); i++){
            cout << ch[i] << ' ';
        }   
        cout << endl;
        str1.append(str2.c_str(), 2); //把字符串中的前两个元素插入到str1尾部
        str1.append(1, 'A');
        str1.append(str2.begin(), str2.end());
        cout << "str1 = " << str1 << endl;
        cout << endl;
    
        return 0;
    }
    字符和字符串连接

    #include <string>
    #include <iostream>
    using namespace std;
    
    int main(){
        string result;
        string S1 = "ABC";
        string S2 = "DEF";
        char CP1[] = "GHI";
        char C = 'J';
        cout << "S1 is " << S1 << endl;
        cout << "S2 is " << S2 << endl;
        cout << "C is " << C << endl;
        result = CP1 + S1; 
        cout << "CP1 + S1 is " << result << endl;
        result = S1 + C;
        cout << "S1 + C is " << result << endl;
        result = S1 + S2; 
        cout << "S1 + S2 is " << result << endl;
        result = CP1 + C + S1; 
        cout << "CP1 + C + S1 is " << result << endl; 
        result = S1 + CP1 + C;
        cout << "S1 + CP1 + C is " << result << endl;
    
        return 0;
    }
    字符串迭代:

    #include <string>
    #include <iostream>
    #include <algorithm>
    using namespace std;
    
    int main(){
        const string hello("Hello, how are you?");
        string s(hello.begin(), hello.end());
        cout << "s : " << s << endl;
        string::iterator pos;
        for(pos = s.begin(); pos != s.end(); ++pos){
            cout << *pos << ' ';
        }   
        cout << endl;
        //字符串翻转
        reverse(s.begin(), s.end());
        cout << "reverse: " << s << endl;
        //去除重复元素
        s.erase(unique(s.begin(), s.end()), s.end());
        cout << "no duplictes: " << s << endl;
    }

  • 相关阅读:
    JHipster
    Integrating Jenkins and Apache Tomcat for Continuous Deployment
    What is the difference between apache tomcat deployer and core version?
    JEECG--去掉(增加)登陆页面验证码功能
    Protobuf一例
    进程间通信之POSIX信号量
    进程间通信之共享存储
    进程间通信之信号量
    进程间通信之消息队列
    进程间通信之XSI IPC
  • 原文地址:https://www.cnblogs.com/lanzhi/p/6468619.html
Copyright © 2011-2022 走看看