最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++ 標(biāo)準(zhǔn)模板庫 STL 順序容器詳解

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

C++ 標(biāo)準(zhǔn)模板庫 STL 順序容器

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

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

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

​ 一個(gè) vector 常用函數(shù)使用實(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)建一個(gè) vector,可以設(shè)定大小 nSize
vector(const vector&) 拷貝構(gòu)造函數(shù),可以對區(qū)間內(nèi)另一個(gè)數(shù)組的元素進(jìn)行拷貝
operator= 將新內(nèi)容分配給容器,替換其當(dāng)前內(nèi)容,并相應(yīng)地修改其大小
assign 將新內(nèi)容分配給 vector,替換其當(dāng)前內(nèi)容,并相應(yīng)地修改其 size

 容量管理函數(shù)

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

 增刪函數(shù)

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

 索引函數(shù)

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

迭代器函數(shù)

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

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

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

int main(){
    vector<vector<int>> arr(3); // arr中有 3 個(gè)元素,每個(gè)元素都是 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;
}

雙向隊(duì)列 deque

deque #include <deque> 雙向隊(duì)列:其元素在內(nèi)存中是連續(xù)存放的,隨機(jī)存取任何元素都可以在常數(shù)時(shí)間內(nèi)完成,在該容器的兩端增刪元素也幾乎能夠在常數(shù)時(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 在容器的末尾添加一個(gè)新元素
push_front 在容器的開頭插入一個(gè)新元素
pop_back 刪除容器中的最后一個(gè)元素,同時(shí)將容器大小減少一個(gè)
pop_front 刪除容器中的第一個(gè)元素,同時(shí)將容器大小減少一個(gè)
emplace_front 在容器的開頭插入一個(gè)新的元素
emplace_back 在容器的末尾插入一個(gè)新的元素

雙向鏈表 list

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

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

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

​ 一個(gè) list 的成員函數(shù)使用實(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ù)進(jìn)行 lst2 排序
    cout << "3) ";
    printList(lst2.begin(),lst2.end());
    lst2.unique(); // 刪除 lst2 中所有和前一個(gè)元素相等的元素
    cout << "4) ";
    printList(lst2.begin(),lst2.end());
    lst2.pop_front(); // 將 lst2 的第一個(gè)元素刪除
    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++ 標(biāo)準(zhǔn)模板庫 STL 順序容器詳解的文章就介紹到這了,更多相關(guān)C++ 標(biāo)準(zhǔn)模板庫 STL 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java 出現(xiàn)NullPointerException的原因及解決辦法

    java 出現(xiàn)NullPointerException的原因及解決辦法

    這篇文章主要介紹了java 出現(xiàn)NullPointerException的原因及解決辦法的相關(guān)資料,這里說明出現(xiàn)NullPointerException 的原因的總結(jié),并說明該如何解決,需要的朋友可以參考下
    2017-08-08
  • C++詳解哈夫曼樹的概念與實(shí)現(xiàn)步驟

    C++詳解哈夫曼樹的概念與實(shí)現(xiàn)步驟

    給定N個(gè)權(quán)值作為N個(gè)葉子結(jié)點(diǎn),構(gòu)造一棵二叉樹,若該樹的帶權(quán)路徑長度達(dá)到最小,稱這樣的二叉樹為最優(yōu)二叉樹,也稱為哈夫曼樹(Huffman?Tree)。哈夫曼樹是帶權(quán)路徑長度最短的樹,權(quán)值較大的結(jié)點(diǎn)離根較近
    2022-04-04
  • C語言如何實(shí)現(xiàn)順序表(數(shù)據(jù)結(jié)構(gòu))

    C語言如何實(shí)現(xiàn)順序表(數(shù)據(jù)結(jié)構(gòu))

    這篇文章主要介紹了C語言如何實(shí)現(xiàn)順序表(數(shù)據(jù)結(jié)構(gòu))問題,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-08-08
  • C語言指針超詳細(xì)講解上篇

    C語言指針超詳細(xì)講解上篇

    指針提供了對地址操作的一種方法,因此,使用指針可使得?C?語言能夠更高效地實(shí)現(xiàn)對計(jì)算機(jī)底層硬件的操作。另外,通過指針可以更便捷地操作數(shù)組。在一定意義上可以說,指針是?C?語言的精髓
    2022-04-04
  • 淺談C語言共用體和與結(jié)構(gòu)體的區(qū)別

    淺談C語言共用體和與結(jié)構(gòu)體的區(qū)別

    下面小編就為大家?guī)硪黄獪\談C語言共用體和與結(jié)構(gòu)體的區(qū)別。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-02-02
  • C語言結(jié)課設(shè)計(jì)之計(jì)算器功能

    C語言結(jié)課設(shè)計(jì)之計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了C語言結(jié)課設(shè)計(jì)之計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • 簡單聊聊C++中線程的原理與實(shí)現(xiàn)

    簡單聊聊C++中線程的原理與實(shí)現(xiàn)

    C++11?引入了多線程支持,提供了一套基本的線程庫,包括線程、互斥量(mutex)、條件變量(condition_variable)等。這些組件可以幫助你在?C++?程序中實(shí)現(xiàn)并發(fā)和多線程編程,本文就來和大家簡單聊聊吧
    2023-03-03
  • C語言實(shí)現(xiàn)簡易的三子棋小游戲

    C語言實(shí)現(xiàn)簡易的三子棋小游戲

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)簡易的三子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    Windows下Qt讀取系統(tǒng)的內(nèi)存、CPU、GPU等使用信息的示例代碼

    在當(dāng)今計(jì)算機(jī)應(yīng)用廣泛的領(lǐng)域中,了解系統(tǒng)的內(nèi)存、CPU和GPU使用情況是非常重要的,本文將介紹如何使用Qt和Windows API來讀取系統(tǒng)的內(nèi)存、CPU和GPU使用詳細(xì)信息,將提供一個(gè)完整的示例代碼,需要的朋友可以參考下
    2024-01-01
  • C++ std::condition_variable 條件變量用法解析

    C++ std::condition_variable 條件變量用法解析

    condition_variable(條件變量)是 C++11 中提供的一種多線程同步機(jī)制,它允許一個(gè)或多個(gè)線程等待另一個(gè)線程發(fā)出通知,以便能夠有效地進(jìn)行線程同步,這篇文章主要介紹了C++ std::condition_variable 條件變量用法,需要的朋友可以參考下
    2023-09-09

最新評論

崇信县| 贺州市| 大丰市| 南岸区| 石渠县| 嘉荫县| 亚东县| 旌德县| 定兴县| 江油市| 濉溪县| 剑阁县| 永宁县| 乳山市| 崇州市| 凤山市| 宝山区| 罗定市| 海原县| 咸阳市| 金山区| 霍林郭勒市| 张掖市| 龙泉市| 定南县| 儋州市| 贵定县| 吐鲁番市| 莎车县| 北安市| 永济市| 绥棱县| 宁河县| 曲周县| 静乐县| 西盟| 石景山区| 瑞安市| 嵊州市| 阳高县| 宁蒗|