常用STL容器
vector
標頭檔案<vector>
可變陣列,類似陣列。
構造方法
vector(); //構造一個空的vector 例 : vector<int> a; vector( size_type num, const TYPE &val ); //構造一個初始放入num個值為val的元素的vector 例 : vector<int> v1( 5, 42 ); //構造了一個包含5個值為42的元素的vector vector( const vector &from ); //構造一個與vector from 相同的vector vector( input_iterator start, input_iterator end ); //構造一個初始值為[start,end)區間元素的vector(注:半開區間).
常用方法
push_back()
void push_back( const TYPE &val );
新增值為val的元素到當前vector末尾。
pop_back()
void pop_back();
刪除當前vector最末的一個元素。
clear()
void clear();
刪除當前vector中的所有元素。
注:不釋放記憶體,若要釋放記憶體,請用vector<ElementType>().swap(vec);
size()
size_type size();
size() 函式返回當前vector所容納元素的數目。
empty()
bool empty();
如果當前vector沒有容納任何元素,則empty()函式返回true,否則返回false。
修改元素
用=賦值即可。
vec[i] = x;
把 vec 裡下標為 i 的元素的值修改為 x.
二維vector
vector<vector<int> > vec2;
一維一維地賦值
注:<int> >
中的空格不可省略;
set
標頭檔案<set>
集合,其中元素無重複。
構造方法
set(); //構造一個空的set 例 : set<int> a; set( const set &from ); //構造一個與set from 相同的set set( input_iterator start, input_iterator end ); //構造一個初始值為[start,end)區間元素的set(注:半開區間).
example
// constructing sets
#include <iostream>
#include <set>
using namespace std;
bool fncomp (int lhs, int rhs) {return lhs<rhs;}
struct classcomp {
bool operator() (const int& lhs, const int& rhs) const
{return lhs<rhs;}
};
int main ()
{
set<int> first; // empty set of ints
int myints[]= {10,20,30,40,50};
set<int> second (myints,myints+5); // pointers used as iterators
set<int> third (second); // a copy of second
set<int> fourth (second.begin(), second.end()); // iterator ctor.
set<int,classcomp> fifth; // class as Compare
bool(*fn_pt)(int,int) = fncomp;
set<int,bool(*)(int,int)> sixth (fn_pt); // function pointer as Compare
return 0;
}
常用方法
insert()
iterator insert( iterator i, const TYPE &val );
//在迭代器i前插入val;
void insert( input_iterator start, input_iterator end );
//將迭代器start開始到end結束返回內的元素插入到集合中;
pair insert( const TYPE &val );
//在當前集合中插入val元素,並返回指向該元素的迭代器和一個布林值來說明val是否成功的被插入了。
注:插入兩個相同的元素是無效的。
count()
size_type count( const key_type &key );
返回當前集合中出現的某個值的元素的數目。
erase()
void erase( iterator i );
//刪除i元素;
void erase( iterator start, iterator end );
//刪除從start開始到end結束的元素;
size_type erase( const key_type &key );
//刪除等於key值的所有元素(返回被刪除的元素的個數)。
clear()
void clear();
刪除當前vector中的所有元素。
注:會清空記憶體。
size()
size_type size();
size() 函式返回當前vector所容納元素的數目。
empty()
bool empty();
如果當前vector沒有容納任何元素,則empty()函式返回true,否則返回false。
find()
iterator find( const key_type &key );
在當前集合中查詢等於key值的元素,並返回指向該元素的迭代器;如果沒有找到,返回指向集合最後一個元素的迭代器。
遍歷
迭代器set<T>::iterator it
for(set<T>::iterator it = s.begin(); it != s.end(); it++){
//遍歷操作
}
注: 在C++裡遍歷set是從小到大排序的,也就是說set會幫我們排序。
map
標頭檔案<map>
對映,由關鍵字集合(key) 和值集合(value)組成。
構造方法
map();
//構造一個空的set
例 : map<char, int> first;
map( const map &from );
//構造一個與map from 相同的map
例 : map<char, int> second(first);
map( input_iterator start, input_iterator end );
//構造一個初始值為[start,end)區間元素的map(注:半開區間).
例 : map<char, int> third(first.begin(), first.end());
常用函式
insert()
pair insert( const pair &val );
只有在val不存在時插入val。返回值是一個指向被插入元素的迭代器和一個描述是否插入的bool值。
pair
是一個標準庫型別,定義在標頭檔案utility
中。可以看成是有兩個成員變數first
和second
的結構體,並且過載了<
運算子(先比較first
大小,如果一樣再比較second
)。當我們建立一個pair
時,必須提供兩個型別。
pair
的定義:pair<string, int> p;
樣例:
#include<map>
#include<string>
#include<utility>
using namespace std;
int main(){
map<string, int> dict;
dict.insert(make_pair("Tom", 1));
//make_pair(V1, v2)函式返回由v1和v2初始化的pair,型別可以從v1和v2的值推斷出來。
}
注: 如果插入的key
之前已經存在,將不會插入新的value
值代替原來的,即本次插入無效。
count()
size_type count( const KEY_TYPE &key );
count()函式返回map中鍵值等於key的元素的個數。
如果存在返回1,否則0.
其他與set相似
對映的訪問
用[]
來訪問。
例:dict[key]
如沒有插入該key,則會返回value的對應型別的預設值。
也可以直接用本方法賦值來插入對映。
遍歷
使用迭代器遍歷,和set差不多。
迭代器定義:map<T1, T2>::iterator it;
迭代器指向的元素是一個pair
,其成員first
和second
分別對應對映的key
和value
。
用->
運算子來獲取值,it->first
或(*it).first
.
for(map<T1, T2>::iterator it = dict.begin(); it != dict.end(); it++){
//遍歷操作,例:
cout << it->first << " -> " << it->second << endl;
}
注: 在C++裡遍歷map也是從小到大排序的。
二維
//map套set
map<T1, set<T2> > m1;
//map套map
map<T1, map<T2, T3> > m2;
stack
標頭檔案<stack>
只允許在棧的一端插入或刪除元素。(LIFO : Last In First Out)
構造方法
stack<T> s; //空棧
stack<T> s( const Container& ctnr = Container() );
//通過別的容器來構造棧,ctnr可以是deque、vector.
常用函式
push()
void push( const TYPE &val );
將 val 值壓棧,使其成為棧頂的第一個元素。
pop()
void pop();
移除堆疊中最頂層元素。
size()
size_type size();
返回當前堆疊中的元素數目。
empty()
bool empty();
如當前堆疊為空,empty() 函式 返回 true 否則返回false.
top()
TYPE &top();
返回對棧頂元素的引用。