1.順序容器(sequence container) --擁有由單一類型元素組成的一個有序集合
   list, vector, deque
2.關聯容器(associative container) --支持查詢一個元素是否存在, 并且可以有效地獲取元素
   map, set, multimap, multiset
3.容器的容量 --在容器下一次需要增長自己之前能夠被加入到容器中的元素的總數(容量只與連續存儲的容器相關:vector, deque, string. 而list不要求

容量)
4.capacity()操作 --求一個容器的容量
5.容器的長度 --容器當前擁有元素的個數
6.size()操作 --求一個容器的長度
7.數據類型越復雜, vector的效率就越低
8.reserve()操作 --允許程序員將容器的容量設置成一個現實指定的值
9.迭代器(iterator) --提供了一種一般化的方法, 對順序或關聯容器類型中的每個元素進行連續訪問
10.每個容器類型都提供了一個begin()和一個end()成員函數
11.begin()返回一個iterator, 指向容器的第一個元素
12.end()返回一個iterator, 指向容器的末元素的下一個位置
13.出了iterator類型, 每個容器還定義了一個const iterator類型, 對于遍歷const容器是必需的
14.iterator算術論算只適用于vector或deque, 而不適用與list, 因為ielist的元素在內存中不是連續存儲的
15.string.find_first_of()查找與被搜索字符串中任意一個字符相匹配的第一次出現, 并返回它的索引位置
16.string.substr()生成string對象的字串的一個拷貝
17.string.rfind()查找最后的指定字串出現的索引
18.string.find_first_not_of()查找第一個不與要搜索字符串的任意字符相匹配的字符
19.string.find_last_of()查找字符串中的"與搜索字符串任意元素相匹配"的最后一個字符
20.string.find_last_not_of()查找字符串中的"與搜索字符串任意字符全不匹配"的最后一個字符
21.string.erase(pos, num)操作去掉字符串中的指定串, pos表示位置, num表示去掉的長度
22.<locale>ctype類, 封轉了標準c庫函數的功能及一組非成員函數
23.string.compare(pos, num, str); 比較pos位置的后面num個字符是否為str
24.string.insert(pos, newstring); pos表示要插入的位置, newstring表示要插入的字符串
25.string.assign(); 字符串拷貝
26.string.append(); 字符串拼接
27.string.swap(); 交換兩個字符串
28.string.at(); 對字符的下標索引操作, 有對索引值范圍檢測, 下標越界時拋出out_of_range異常
   try {
      char ch = st.at(index);
   } catch(std::out_of_range) { ... }
29.string.replace(pos, num, newstring); 用newstring代替pos后面num個字符子串
30.map 也叫關聯數組(associative array) 鍵/值對 key/value
    鍵用來索引map, 值用作存儲和檢索的數據
    map對象定義, 至少要指明鍵和值的類型, 如:
    map<string, int> word_count;
31.map的數據錄入
    map<string, string> str_str;
    str_str[string("one")] = string("1"); //這種效率比較低
    str_str.insert(
        map<string, string>::value_type("two", "2")
    );  //這種效率高
32.查找并獲取map中的元素
    最簡單的方法:
    value = mapObj[key];
    但這樣有個問題, 如果不存在key這個鍵, mapObj就會插入key鍵, 并把對應的value值為默認值, 這樣得到的value是無效的
    所以, 應該這樣寫
    if(mapObj.count(key))
        value = mapObj[key];
    或者這樣:
    map<keyType, valueType>::iterator iter = mapObj.find(key);
    if(iter != mapObj.end())
      value = mapObj[key];
33.從map中刪除元素
    erase操作
    mapObj.erase(key);
    還有兩種重載方式, 詳見文檔

    mapObj.clear(); 清空map對象所有值

34.set對象插入元素
    #include <set>
    set<setType> setObj;
    setObj.insert(key);
35.set對象查找元素
    setObj.count(key); //1有, 0沒有
    setObj.find(key); iter為setObj.end()表示沒有
36.multiset和multimap允許要被存儲的鍵出現多次
    對于multiset和multimap的迭代策略是聯合使用find返回的iterator和count返回的值:
    count = mulsetObj.count();
    multiset<type>::iterator iter;
    iter = mulsetObj.find(key);
    for(int i = 0; i < count; ++i, ++iter)
        do_something(*iter);
    另一種方法是使用equal_range()返回的iterator值
    如果這個值存在, 則第一個iterator指向該值的第一個實例, 且第二個iterator指向這個值的最后一個實例的下一個位置:
    switch(mulmapObj.count) {
    case 0: break; //不存在
    case 1: //只有一項, 用普通的find操作
        multimap<keyType, valueType>::iterator iter;
        iter = mulmapObj.find(key);
        do_something(*iter);
        break;
    default: //有許多項
        typedef multimap<keyType, valueType>::iterator it;
        pair<it, it>pos;
        pos = mulmapObj.equal_range(key);
        for(; pos.first != pos.second; pos.first++)
            do_somethine(*pos.first);
    }
    //對應的, 刪除的話用mulmapObj.erase(pos.first, pos.second);
    //不支持下標操作是訪問multimap元素的一個限制:
    mulmapObj[key]; //錯誤
37.棧容器(stack container)支持的操作 //頭文件<stack>
   empty()
   size()
   pop()
   top()
   push(item)
38.棧類型被稱為容器適配器(container adapter)
39.缺省情況下, 棧用容器類型deque實現, 改變這個缺省值可以這樣:
    stack<type, list<type>> stackObj; //改成用容器類型list實現
    //一般是定義一個指針棧
    class CTest;
    stack<CTest*> ctestStack;
40.標準庫提供了兩種風格的隊列: queue(隊列), priority_queue(優先級隊列)
    頭文件 <queue>
41.queue和priority_queue操作
   empty()
   size()
   pos()
   front() //只能用在一般隊列
   back() //只能用在一般隊列
   top()  //只能用在優先級隊列
   push(item)