1. 程式人生 > >SQL容器

SQL容器

c++容器基本使用

順序容器(按順序儲存,插入快,查詢慢):

  • vector在最後插入資料;

    1.STLvector類與陣列類似,允許隨機詢問元素,即可使用下標運算子[]指定元素在 vector 中的位置(索引),從而直接訪問或操作元素. 2.將所有元素儲存在連續的儲存單元中
  • deque允許在開頭插入或刪除元素;

  • list可在任何位置新增或刪除元素;

    1.連結串列的STL實現 2.不能隨機訪問
  • forward_list是單向連結串列,只能沿一個方向遍歷。

關聯容器(指定順序儲存,插入慢,查詢快):

  • set:儲存各不相同的值,插入時進行排序;

  • map:儲存鍵值對,根據唯一鍵排序;

  • multiset:與set類似,但可以有重複元素。

注意:STL容器是泛型模板類,所以是通用的,可用於儲存字串、整型、結構或類物件。

1.STL動態陣列vector類

  • 實列化vector

    //例項化一個儲存整型資料的 vector,使用了預設建構函式
    vector<int> vecone;
    //vector 至少應包含10個元素。注意,這並沒有限制容器最終的大小,而只是設定了初始大小。
    vector<int> vectwo(10);
    //10個90值
    vector<int> vecthree(10, 90);
    //使用一個 vector 例項化另一個vector 的內容,即複製vector物件或其一部分
    vector<int> vecfour(vecthree);
    
  • push_back()在末尾插入元素

    vector <int> veclntegers;
    veclntegers.push_back(50);
    veclntegers.push_back(1);
    vecIntegers.push_back(987);
    veclntegers.push_back(1001);
    cout << veclntegers.size()<<endl;
    //也可以像陣列一樣初始化
    vector<int> veclntegers = {50, 1, 987, 1001};
    vector<int> vecMorelntegers {50, 1, 987, 1001};
    
  • 使用 insert()在指定位置插入元素

    //在開頭插入
    vecone.insert (vecone.begin(), 25);
    

    注意:儘量避免頻繁使用insert,因為它是低效的,它會導致元素後移,頻繁在中間插入應使用list

  • 陣列語法訪問vector元素

    vector<int> vecone(5,10);
    for(int num; num<vecone.size();++num)
    //使用[]訪問的時候有越界的危險
    cout<<vecone[num]<endl;
    //at()函式會檢查異常
    cout<<vecone.at(num)<<endl;
    
  • pop_back刪除vector末尾的元素

    vector<int> vecone(10,90);
    vecone.pop_back();
    

2.STL動態陣列deque:

  • 與vector非常類似,區別:

使用 push_front 和 pop_front 在開頭插入和刪除元素

```
deque<int> deqone;
deqone.push_back(3);
deqone.push_back(4);
deqone.push_back(5);
//在開頭插入
deqone.push_front(2);
deqone.push_front(1);
deqone.push_front(0); // 0,1,2,3,4,5
deque.pop_back(); // 0,1,2,3,4
//刪除開頭元素
deque.pop_front(); //1,2,3,4
```

3.STL::list

  • list是一個雙向連結串列,插入和刪除元素速度快,而且時間固定

  • list的實列化和在末尾,開頭插入元素和deque類似

  • 在list中間插入元素,藉助insert函式

    x.push_back(1);
    x.push_back(2);     //(1,2)
    x.insert(x.begin(),2);      //(2,1,2)
    x.insert(x.begin(),2,3);    //(3,3,2,1,2)
    x.insert(x.begin(),x.begin(),--x.end());    //(3,3,2,1,2,3,3,2,1,2)
    

注意:insert中的引數是迭代器(類似於指標)

  • 刪除list中元素,藉助erase函式

    //接受一個迭代器引數並刪除迭代器指向的元素
    listlntegers.erase(isite)
    //接受兩個選代器引數並刪除指定範圍內的所有元素
    listlntegers.erase(listlntegers.begin() , listlntegers.end());
    
  • 對list元素進行反轉

    x.reverse();
    
  • 對list元素進行排序

    x.sort();   //預設遞增排序
    
  • 對list的遍歷訪問

    list<int>x;
    list<int>::iterator it;     //建立迭代器
    x.push_back(1);
    x.push_back(2);
    x.insert(x.begin(),2);
    x.insert(x.begin(),2,3);
    x.insert(x.begin(),x.begin(),--x.end());
    x.reverse();
    for(it = x.begin(); it != x.end(); it++) {
    	cout<<*it<<endl;        //迴圈輸出
    

STL集合set(快速的查詢和搜尋)

  • 例項化物件(預設升序排序)

    set<int> seone;
    multiset<int> musone;
    
  • set插入元素

    setlntegers.insert(1);
    msetlntegers.insert (setlntegers.begin(), setlntegers.end());
    
  • set中查詢元素

    和map類似
    map查詢的是key
    set查詢的是元素
    
  • 刪除set中的元素

    和map類似
    

STL對映類map(類似於字典)

key(鍵)–value(值)

  • 例項化map物件

    map<int, string> maptwo;
    map<int, string> mapthree(maptwo);
    map<int, string> mapfour(mapthree.begin(), mapthree.end())
    
  • map插入元素

    1.使用makepair函式
    mapone.insert(make_pair(1, "one"));
    
    2.使用pair
    mapone.insert(pair<int, string>(2, "two"))
    
    3.使用陣列語法
    mapone[3] = "three";
    
  • 查詢

    std::map<char,int> mymap;
    std::map<char,int>::iterator it;
    
    mymap['a']=50;
    mymap['b']=100;
    mymap['c']=150;
    mymap['d']=200;
    
    it = mymap.find('b');
    f (it != mymap.end())
    mymap.erase (it); // b被成功刪除
    
    
  • map刪除元素

  1. 將鍵作為引數,這將刪除包含指定鍵的所有鍵-值對:
    mapObject.erase(key);
    
  2. 接受迭代器作為引數,並刪除選代器指向的元素:
    mapObject.erase(iElement);
    
  3. 使用選代器指定邊界,從而將指定範圍內的所有元素都從 map 或 multirnap 中刪除:
    mapObject.erase(iLowerBound, iUpperBound);