欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++ 標準模板庫 STL 順序容器詳解

 更新時間:2021年05月11日 14:37:51   作者:海華啊  
這篇文章主要介紹了C++ 標準模板庫 STL 順序容器詳解,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下

C++ 標準模板庫 STL 順序容器

容器 數(shù)據(jù)結(jié)構(gòu) 順序性 重復(fù)性 支持迭代器
vector 動態(tài)數(shù)組 無序 可重復(fù) 隨機訪問迭代器
deque 雙向隊列 無序 可重復(fù) 隨機訪問迭代器
list 雙向鏈表 無序 可重復(fù) 雙向迭代器

動態(tài)數(shù)組 vector

vector #include <vector> 動態(tài)數(shù)組:其元素在內(nèi)存中是連續(xù)存放的,隨機存取任何元素都可以在常數(shù)時間內(nèi)完成,在該容器的尾部增刪元素也幾乎能夠在常數(shù)時間內(nèi)完成具有較好的性能。

​ 一個 vector 常用函數(shù)使用實例如下:

#include <iostream>
#include <vector>
using namespace std;
template<class T>
void printVector(T s, T e){
    for(;s != e; ++s){
        cout << *s << ' ';
    }
    cout << endl;
}

int main(){
    int a[5] = {1,2,3,4,5};
    vector<int> v(a,a+5);
    cout << "1)" << v.end() - v.begin() << endl;
    cout << "2)";
    printVector(v.begin(), v.end());
    v.insert(v.begin()+3, 100); // insert()函數(shù)插入元素
    cout << "3)";
    printVector(v.begin(), v.end());

    vector<int> v2(5,0);
    v2.insert(v2.begin()+2,v.begin(),v.end()); // insert() 函數(shù)數(shù)據(jù)塊插入  
    cout << "4)";
    printVector(v2.begin(), v2.end());   
    v.erase(v.begin()+3); // erase() 函數(shù)刪除元素 
    cout << "5)";
    printVector(v.begin(), v.end());
    v.erase(v.begin()+2,v.begin()+4); // erase() 函數(shù)刪除數(shù)據(jù)塊
    cout << "6)";
    printVector(v.begin(), v.end());
 
    return 0;
}

構(gòu)造函數(shù)

函數(shù) 函數(shù)描述
vector 構(gòu)造函數(shù)創(chuàng)建一個 vector,可以設(shè)定大小 nSize
vector(const vector&) 拷貝構(gòu)造函數(shù),可以對區(qū)間內(nèi)另一個數(shù)組的元素進行拷貝
operator= 將新內(nèi)容分配給容器,替換其當前內(nèi)容,并相應(yīng)地修改其大小
assign 將新內(nèi)容分配給 vector,替換其當前內(nèi)容,并相應(yīng)地修改其 size

 容量管理函數(shù)

函數(shù) 函數(shù)描述
size 返回容器中元素的數(shù)量
max_size 返回容器可容納的最大元素數(shù)
resize 調(diào)整容器的大小,使其包含 n(參數(shù))個元素
capacity 返回當前為 vector 分配的存儲空間(容量)的大小
empty 返回 vector 是否為空
reserve 請求 vector 容量至少足以包含 n(參數(shù))個元素
shrink_to_fit 要求容器減小其 capacity(容量)以適應(yīng)其 size(元素數(shù)量)

 增刪函數(shù)

函數(shù) 函數(shù)描述
push_back 在容器的最后一個元素之后添加一個新元素
pop_back 刪除容器中的最后一個元素,有效地將容器 size 減少一個
insert 通過在指定位置的元素之前插入新元素來擴展該容器,通過插入元素的數(shù)量有效地增加容器大小
erase 從 vector 中刪除單個元素(position)或一系列元素([first,last)),這有效地減少了被去除的元素的數(shù)量,從而破壞了容器的大小
clear 從 vector 中刪除所有的元素(被銷毀),留下 size 為 0 的容器
emplace 通過在 position(參數(shù))位置處插入新元素 args(參數(shù))來擴展容器
emplace_back 在 vector 的末尾插入一個新的元素,緊跟在當前的最后一個元素之后

 索引函數(shù)

函數(shù) 函數(shù)描述
operator[] 返回容器中第 n(參數(shù))個位置的元素的引用
at 返回容器中第 n(參數(shù))個位置的元素的引用
front 返回對容器中第一個元素的引用
back 返回對容器中最后一個元素的引用
data 返回指向容器中第一個元素的指針

迭代器函數(shù)

函數(shù) 函數(shù)描述
begin 返回指向容器中第一個元素的迭代器
end 返回指向容器中最后一個元素之后的理論元素的迭代器
rbegin 返回指向容器中最后一個元素的反向迭代器
rend 返回一個反向迭代器,指向中第一個元素之前的理論元素
cbegin 返回指向容器中第一個元素的常量迭代器(const_iterator)
cend 返回指向容器中最后一個元素之后的理論元素的常量迭代器(const_iterator)
crbegin 返回指向容器中最后一個元素的常量反向迭代器(const_reverse_iterator)
crend 返回指向容器中第一個元素之前的理論元素的常量反向迭代器(const_reverse_iterator)

用 vector 實現(xiàn)二維數(shù)組

#include <iostream>
#include <vector>
using namespace std;

int main(){
    vector<vector<int>> arr(3); // arr中有 3 個元素,每個元素都是 vector<int> 容器
    for(int i=0; i<arr.size(); ++i){
        for(int j=0; j<3; ++j){
            arr[i].push_back(j);
        }
    }
    for(int i=0; i<arr.size(); ++i){
        for(int j=0; j<3; ++j){
            cout << arr[i][j] << ' ';
        }
        cout << endl;
    }
    return 0;
}

雙向隊列 deque

deque #include <deque> 雙向隊列:其元素在內(nèi)存中是連續(xù)存放的,隨機存取任何元素都可以在常數(shù)時間內(nèi)完成,在該容器的兩端增刪元素也幾乎能夠在常數(shù)時間內(nèi)完成具有較好的性能。

​ 所有適用于 vector 的操作都適用于 deque,除此之外,deque 還有 push_front / pop_front 在最前端插入或刪除元素的操作,復(fù)雜的都是 O ( 1 ) O(1) O(1) 。

函數(shù) 函數(shù)描述
deque 構(gòu)造函數(shù)
push_back 在容器的末尾添加一個新元素
push_front 在容器的開頭插入一個新元素
pop_back 刪除容器中的最后一個元素,同時將容器大小減少一個
pop_front 刪除容器中的第一個元素,同時將容器大小減少一個
emplace_front 在容器的開頭插入一個新的元素
emplace_back 在容器的末尾插入一個新的元素

雙向鏈表 list

list #include <list> 雙向鏈表:其元素在內(nèi)存中是不連續(xù)存放的,不支持隨機存取,在該容器的任何位置增刪元素幾乎都能夠在常數(shù)時間內(nèi)完成具有較好的性能。

list 除了具有所有順序容器都有的成員函數(shù)之外,還支持以下8個成員函數(shù):

函數(shù) 函數(shù)描述
push_front 在容器的開頭插入一個新元素
pop_front 刪除容器中的第一個元素
sort 元素排序,值得注意的是 list 不支持 STL 算法中的 sort
remove 刪除和指定值相等的所有元素
unique 刪除所有和前一個元素相同的元素,使得元素不重復(fù),使用之前需要sort
merge 合并兩個鏈表,并清空被合并的那個鏈表
reverse 顛倒鏈表內(nèi)容
splice 在指定位置前面插入另一鏈表中的一個或多個元素,并在該鏈表中刪除這些元素

​ 一個 list 的成員函數(shù)使用實例如下:

#include <iostream>
#include <list>
#include <algorithm>
using namespace std;

class A{
    private:
        int n;
    public:
        A(int n_){n = n_;}
        friend bool operator<(const A & a1, const A & a2);
        friend bool operator==(const A & a1, const A & a2);
        friend ostream& operator<<(ostream & o, const A & a2);
};

bool operator<(const A & a1, const A & a2){
    return a1.n < a2.n;
}

bool operator==(const A & a1, const A & a2){
    return a1.n == a2.n;
}

ostream& operator<<(ostream & o, const A & a2){
    o << a2.n;
    return o;
}

template <class T>
void printList(T start, T end){
    for(;start != end; ++start){
        cout << *start << ',';
    }
    cout << endl;
}

int main(){
    list<A> lst1, lst2;
    lst1.push_back(1); lst1.push_back(3);
    lst1.push_back(2); lst1.push_back(4);
    lst1.push_back(2);
    lst2.push_back(10); lst2.push_back(50);
    lst2.push_back(30); lst2.push_back(30);  
    lst2.push_back(40); lst2.push_back(40); 
    lst2.push_back(30); lst2.push_back(20);
    cout << "1) ";
    printList(lst1.begin(),lst1.end());
    cout << "2) ";
    printList(lst2.begin(),lst2.end());
    lst2.sort(); // 調(diào)用 sort 成員函數(shù)進行 lst2 排序
    cout << "3) ";
    printList(lst2.begin(),lst2.end());
    lst2.unique(); // 刪除 lst2 中所有和前一個元素相等的元素
    cout << "4) ";
    printList(lst2.begin(),lst2.end());
    lst2.pop_front(); // 將 lst2 的第一個元素刪除
    cout << "5) ";
    printList(lst2.begin(),lst2.end());
    lst1.remove(2); // 刪除 lst1 中所有值為 2 的元素
    cout << "6) ";
    printList(lst1.begin(),lst1.end());
    lst2.merge(lst1); // 將 lst1 中的元素合并到 lst2 并將 lst1 清空
    cout << "7) ";
    printList(lst2.begin(),lst2.end());
    lst2.reverse(); // 顛倒 lst2
    cout << "8) ";
    printList(lst2.begin(),lst2.end());
    
    lst1.push_back(100); lst1.push_back(200); 
    lst1.push_back(300); lst1.push_back(400);
    cout<<"9) ";
    printList(lst1.begin(),lst1.end());
    // 找到列表中的指定元素
    list<A>::iterator p1,p2,p3;
    p1 = find(lst2.begin(),lst2.end(),4);
    p2 = find(lst1.begin(),lst1.end(),200);
    p3 = find(lst1.begin(),lst1.end(),400);
    lst2.splice(p1,lst1,p2,p3); // 將 lst1 中 [p2,p3) 區(qū)間內(nèi)的元素插入到 lst2 中 p1 位置之前,并將這些元素從 lst1 中刪除
    cout<<"10) ";
    printList(lst1.begin(),lst1.end());
    cout<<"11) ";
    printList(lst2.begin(),lst2.end());
    
    return 0;
}

到此這篇關(guān)于C++ 標準模板庫 STL 順序容器詳解的文章就介紹到這了,更多相關(guān)C++ 標準模板庫 STL 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • c++冒泡排序示例分享

    c++冒泡排序示例分享

    冒泡排序是一種計算機科學領(lǐng)域的較簡單的排序算法,這篇文章主要介紹了c++冒泡排序示例,需要的朋友可以參考下
    2014-03-03
  • C++ STL 序列式容器與配接器的簡單使用

    C++ STL 序列式容器與配接器的簡單使用

    本文主要介紹了C++ STL 序列式容器與配接器的簡單使用,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學習學習吧
    2021-06-06
  • C++實現(xiàn)String類實例代碼

    C++實現(xiàn)String類實例代碼

    這篇文章主要介紹了C++實現(xiàn)String類實例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C語言模擬實現(xiàn)庫函數(shù)詳解

    C語言模擬實現(xiàn)庫函數(shù)詳解

    C語言庫函數(shù)是把自定義函數(shù)放到庫里,是別人把一些常用到的函數(shù)編完放到一個文件里,供程序員使用,下面讓我們一起來詳細了解它
    2022-07-07
  • C語言實現(xiàn)簡單職工信息管理系統(tǒng)

    C語言實現(xiàn)簡單職工信息管理系統(tǒng)

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)簡單職工信息管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • C語言超市管理系統(tǒng)設(shè)計

    C語言超市管理系統(tǒng)設(shè)計

    這篇文章主要為大家詳細介紹了C語言超市管理系統(tǒng)設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 詳解Qt使用QImage類實現(xiàn)圖像基本操作

    詳解Qt使用QImage類實現(xiàn)圖像基本操作

    這篇文章主要介紹了Qt如何利用QImage類實現(xiàn)對圖像的基本操作,包括圖像顯示、圖像縮放、圖像旋轉(zhuǎn)等,感興趣的小伙伴可以跟隨小編一起動手嘗試一下
    2022-06-06
  • Qt圖形圖像開發(fā)曲線圖表模塊QChart庫基本用法、各個類之間的關(guān)系說明

    Qt圖形圖像開發(fā)曲線圖表模塊QChart庫基本用法、各個類之間的關(guān)系說明

    這篇文章主要介紹了Qt圖形圖像開發(fā)曲線圖表模塊QChart庫基本用法、各個類之間的關(guān)系說明,需要的朋友可以參考下
    2020-03-03
  • C++ 動態(tài)內(nèi)存管理詳情解說

    C++ 動態(tài)內(nèi)存管理詳情解說

    這篇文章主要介紹了C++ 動態(tài)內(nèi)存管理詳情解說,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,需要的朋友可以參考一下,希望對你的學習有所幫助
    2022-07-07
  • C++中的并行與并發(fā)基礎(chǔ)與使用詳解

    C++中的并行與并發(fā)基礎(chǔ)與使用詳解

    對于多線程來說,這兩個概念有很大部分是重疊的。對于很多人來說,它們的意思沒有什么區(qū)別。其區(qū)別主要在于關(guān)注點和意圖方面(差距甚微)。這兩個詞都是用來對硬件在同時執(zhí)行多個任務(wù)的方式進行描述的術(shù)語,不過并行更加注重性能
    2023-02-02

最新評論