天天看點

CPP_STL

一、概述

STL(标準模闆庫),是目前C++内置支援的library,底層利用了C++類模闆和函數模闆的機制,廣義上由三大部分組成:容器、算法和疊代器。

STL大體分為六大元件,分别是容器、算法、疊代器、仿函數、擴充卡(配接器)、空間配置器。

  • 容器:各種資料結構,如

    vector

    list

    deque

    set

    map

    等,用來存放資料。
  • 算法:各種常用的算法,如

    sort

    find

    copy

    for_each

    等。
  • 疊代器:扮演了容器與算法之間的膠合劑。
  • 仿函數:行為類似函數,可作為算法的某種政策。
  • 擴充卡:一種用來修飾容器或者仿函數或疊代器接口的東西。
  • 空間配置器:負責空間的配置與管理。

容器是STL中很重要的一種資料結構。常見的容器包括:

vector容器,deque雙端數組

stack棧模型,queue隊列模型

list連結清單模型

priotriy_queue優先級隊列

vector deque list set mutliset map multimap
記憶體結構 單端數組 雙端數組 雙向連結清單 二叉樹
随機存取 對key而言是
查找速度 非常慢 對key而言快
插入删除 尾端 頭尾兩端 任何位置 - $1

線上手冊:http://www.martinbroadhurst.com/stl/

man:Ubuntu16下sudo apt-get install libstdc++-5-doc, man std::vector

二、string

string()   string(const char *s)     string(const string &str)   string(int n, char c)

int find(const string &str, int pos = 0) const;

//從

pos

開始查找

str

第一次出現的位置

int find(const char *s, int pos = 0) const;

pos

s

int find(const char *s, int pos, int n) const;

pos

位置查找

s

的前

n

個字元第一次出現的位置

int find(const char c, int pos = 0) const;

//查找字元

c

第一次出現位置

int rfind(const string &str, int pos = npos) const;

pos

str

最後一次出現的位置

int rfind(const char *s, int pos = npos) const;

pos

str

int rfind(const char *s, int pos, int n) const;

pos

s

n

個字元最後一次出現的位置

int rfind(const char c, int pos = 0) const;

c

string &replace(int pos, int n, const string &str);

//将從

pos

開始的

n

個字元替換為字元串

str

string &replace(int pos, int n, const chat *s);

pos

n

s

string &insert(int pos, const char *s);

//插入字元串

string &insert(int pos, const string &str);

string &insert(int pos, int n, char c);

//在指定位置插入n個字元c

string &erase(int pos, int n = npos);

//删除從pos開始的n個字元

string substr(int pos = 0, int n = npose) const;

 //傳回由

pos

n

個字元組成的字元串

将數值轉換為字元串:

string to_string (int val);

string to_string (long val);

string to_string (long long val);

string to_string (unsigned val);

string to_string (unsigned long val);

string to_string (unsigned long long val);

string to_string (float val);

string to_string (double val);

string to_string (long double val);

三、模闆

#include <iostream>
#include <string>
#include <unistd.h>

using namespace std;

template<class NameType=string, class AgeType=short>
class Person {
    public:
    Person(NameType name, AgeType age) {
      m_name = name;
      m_age = age;
    }

    void showInfo() {
      cout << m_name << " is " << m_age << (m_age == 1 ? " year" : " years") << " old. " << endl;
    }

    NameType m_name;
    AgeType m_age;
};

class Wang: public Person<string, short> {
};

void printPerson1(Person<string, short> &p)
{
    p.showInfo();
}

template <class NameType, class AgeType>
void printPerson2(Person<NameType, AgeType> &p){
    p.showInfo();
    cout << "\t NameType:" << typeid(NameType).name() << endl
    << "\t AgetType:" << typeid(AgeType).name() << endl;
}

template <typename T>
void printPerson3(T &p){
    p.showInfo();
    cout << "\t T:" << typeid(T).name() << endl;
}

void test1(){
    Person<string, short> p1("tony", 100);
    printPerson1(p1);

    Person<string, short> p2("AAA", 99);
    printPerson2(p2);

    Person<string, short> p3("BBB", 98);
    printPerson3(p3);

    Wang w1;
    cout << "w.m_name is " << typeid(w1.m_name).name() << endl;
    cout << "w.m_age is " << typeid(w1.m_age).name() << endl;
}

int main(){
    test1();

    pause();
    return 0;
}      

參考:

1. C++提高程式設計(一)  匠心之作 從0到1入門學程式設計  黑馬程式員

2. C++進階-STL容器,你看我就夠了 - 簡書

3. String用法詳解

上一篇: CPP_template