首页 > 代码库 > C++标准库概述

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 << "\n-----------------";
}

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 << "\n size: " << TestString.length() << endl;
    TestString.resize(5);
    cout << TestString << "\n size: " << TestString.size() << endl;
    TestString.resize(10);
    cout << TestString << "\n size: " << TestString.size() << endl;
    TestString.resize(15, ‘6‘);
    cout << TestString << "\n 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;
}

C++标准库概述