1. 程式人生 > >STL(大量部落格蒐集整理,持續更新)

STL(大量部落格蒐集整理,持續更新)

轉:STL在ACM中的應用
STL 提供三種類型的元件:容器、迭代器和演算法,它們都支援泛型程式設計標準。在ACM中充分利用STL可以大大的簡化程式,提高解題效率。
1、容器主要有兩類:順序容器和關聯容器。順序容器(vector/list/deque/string)等是一系列元素的有序集合。關聯容器(set/multiset/map/multimap)包含查詢元素的鍵值。
2、迭代器的作用是遍歷容器。
3、STL演算法庫包含四類演算法:排序演算法,不可變演算法,變序演算法和數值演算法。

https://www.cnblogs.com/shanyr/p/5745807.html   

mark 非常好的總結

1.函式模板

template<class T>

//template 是關鍵字,T 表示一種待例項化的型別

//template<typename T> 也是對的

//函式定義模板

//類 模板

//類 模板
#include<iostream>
using namespace std;
//定義名為ex_class的類模板
template < typename T>  class ex_class
{
    T value;
public:
    ex_class(T v) { value=v; }
    void set_value(T v) { value=v; }
    T get_value(void) {return value;}
};
//main()函式中測試ex_class類模板
int main()
{
    //測試int型別資料
    ex_class <int> a(5),b(10);
   cout<<"a.value:"<<a.get_value()<<endl;
    cout<<"b.value:"<<b.get_value()<<endl;
    //測試char型別資料
    ex_class <char> ch('A');
    cout<<"ch.value:"<<ch.get_value()<<endl;
    ch.set_value('a');
    cout<<"ch.value:"<<ch.get_value()<<endl;
    //測試double型別資料
    ex_class <double> x(5.5);
    cout<<"x.value:"<<x.get_value()<<endl;
    x.set_value(7.5);
    cout<<"x.value:"<<x.get_value()<<endl;
}

很簡便!!!!!!

2.stack 棧

成員函式介紹 

1.empty() 堆疊為空則返回真

2.pop() 移除棧頂元素

3.push() 在棧頂增加元素

4.size() 返回棧中元素數目

5.top() 返回棧頂元素 

3.vector

vector 基本操作

vector<int> v;

v.begin(); //容器的起始位置

v.end(); //容器最後一個位置後的位置

v.front();v.back(); //返回第一個元素(最後一個元素,但不判斷時候存在

v.empty(); //返回是否容器為空

v.clear(); //清空容器

v.erase(m); //刪除m位置的資料,並返回下一個資料的地址(m是迭代器)

v.erase(m,n); //刪除m到n之間的資料,並返回下一個資料的地址

v2.assign(8,1); // 重新給vec2賦值,8個成員的初始值都為1 此操作之後vector變成新的size&value

v.push_back(element); //壓入一個元素到末端

v.pop_back(); //彈出最後一個元素

v.reserve(100);v.resize(101); //resize已經建立空間如果再v.push_back()空間就會到101,而reserve只是預留空間並沒有真正建立,v.push_back() 只是在第1位

v.size();v.capacity(); //size表示的是已經建立的空間大小也可以表示元素個數可用v[]的形式直接訪問,

capacity容器容量,是預留空間並沒有實際建立

swap(a,b); //交換兩個元素的位置如:swap(v[0],v[1]);

vector<int> v(10); //建立一個前十個元素為int的容器

vector<string> v(10,string("I")); //使容器的前10個元素都為string型,並且都初始化為I

vector<string> v1(v2); //對於已經存在的v2建立一個v1副本 //這操作可以啊

v.insert(place,element); v.insert(place,n,element); //在place(迭代器)位插入n個元素

//注:對vector元素的訪問可以用類似c語言的v[],但是最好用v.at(),它會檢查是否越界更安全

v[0]; // A

v.at[0]; // B 這樣越界的時候比較安全

這樣搞下去會很慢的。。。。

不總結不總結了 看這篇就很好

佇列補充:https://blog.csdn.net/c20182030/article/details/70171231

優先佇列 :https://blog.csdn.net/c20182030/article/details/70757660

less是從大到小,greater是從小到大!!!!

 

回頭把最近做的stl的題總結了才是硬道理。。。。。。。