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的題總結了才是硬道理。。。。。。。