欧美一区二区三区老妇人-欧美做爰猛烈大尺度电-99久久夜色精品国产亚洲a-亚洲福利视频一区二区

八、C++STL 6大組件-你必知必會的編程利器

STL這部分推薦直接看《C++ primer》的9到11章內(nèi)容,有非常詳細(xì)的接口列表,還有很多例子。附錄里還有常用的泛型算法,適合經(jīng)??匆幌?/p>

在南州晴隆等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、網(wǎng)站設(shè)計(jì) 網(wǎng)站設(shè)計(jì)制作定制開發(fā),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站設(shè)計(jì),網(wǎng)絡(luò)營銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,南州晴隆網(wǎng)站建設(shè)費(fèi)用合理。

vector容器

底層數(shù)據(jù)結(jié)構(gòu):動(dòng)態(tài)開辟的數(shù)組,每次以原來空間大小的2倍進(jìn)行擴(kuò)容的

vector<int> vec;

deque雙端隊(duì)列和list鏈表

初始的元素放在隊(duì)列的中間,方便后續(xù)添加元素。外部有一個(gè)mapper保存隊(duì)列,隊(duì)滿的時(shí)候會對mapper擴(kuò)容,隊(duì)列放在擴(kuò)容后的mapper的sizeof(原來mapper)/2的位置。

deque容器:

list容器

vector、deque、list對比

vecotr和deque之間的區(qū)別?

  • deque底層內(nèi)存是否是連續(xù)的? 不是。deque是由一個(gè)二維數(shù)組構(gòu)成的。每一個(gè)第二維是連續(xù)的,第一維數(shù)據(jù)不是連續(xù)的。
  • 前中后插入刪除的時(shí)間復(fù)雜度:中間和末尾是O(1),前面插入deque是O(1),vector是O(n)
  • 對于內(nèi)存的使用效率: vector的低,需要的內(nèi)存空間必須是連續(xù)的。deque可以分塊進(jìn)行存儲,不需要內(nèi)存空間必須是連續(xù)的。
  • 由于deque的第二維內(nèi)存空間不是連續(xù)的,所以在deuqe中間進(jìn)行元素的insert或者erase,造成元素移動(dòng)的時(shí)候臂vector要慢

vector和list之間的區(qū)別?

  • list底層是雙向循環(huán)鏈表
  • list的增加刪除是O(1),vector增加刪除是O(n)

詳解容器適配器

無序關(guān)聯(lián)容器

unordered_set:

unordered_map:

map的operator[]重載有兩個(gè)功能:一是查詢,二如果key不存在,會插入一對數(shù)據(jù)

unordered_map<int,string> mp1;
mp1.insert(make_pair(12,"asf"));//生成pair類型
mp1.insert({123,"asfsaf"});

有序關(guān)聯(lián)容器

底層是紅黑樹結(jié)構(gòu)。

自定義類型如何在有序容器中排序:要在自定義類型中提供小于運(yùn)算符的重載

容器的迭代器

函數(shù)對象

函數(shù)對象就是C語言里的函數(shù)指針

把有operator()小括號運(yùn)算符重載函數(shù)的對象,稱作函數(shù)對象或者稱作仿函數(shù)。

好處:

  • 通過函數(shù)對象調(diào)用operator(),可以省略函數(shù)的調(diào)用開銷,比通過函數(shù)指針調(diào)用函數(shù)(不能夠inline內(nèi)聯(lián)調(diào)用)效率高。
  • 因?yàn)楹瘮?shù)對象使用類生成的,所以可以添加相關(guān)的成員變量,用來記錄函數(shù)對象使用時(shí)的更多的信息。
template<typename T>
bool mygreater(T a, T b) {
    return a > b;
}

template<typename T>
bool myless(T a, T b) {
    return a < b;
}

template<typename T>
class Myless{//函數(shù)對象
public:
    bool operator()(T a,T b){
        return a<b;
    }
};

template<typename T, typename Compare>
bool compare(T a, T b, Compare comp) {//使用函數(shù)指針或者函數(shù)對象調(diào)用前面定義的兩個(gè)函數(shù)
    return comp(a, b);//在使用函數(shù)指針的時(shí)候無法聲明為inline函數(shù),效率低
}

int main() {
    cout << compare(10, 30, mygreater<int>)<<endl;
    cout<<compare(20,10,Myless<int>())<<endl;
    return 0;
}

函數(shù)對象的一些其他用法:用于priority_queue和set:

priority_queue<int,vector<int>,Mygreater<int>> queue1;
priority_queue<int> queue2;

for(int i=0;i<20;i++){
    queue1.push(rand()%100);
    queue2.push(rand()%100);
}

for(int i=0;i<20;i++){
    cout<<queue1.top()<<" ";
    queue1.pop();
}
cout<<endl;

for(int i=0;i<20;i++){
    cout<<queue2.top()<<" ";
    queue2.pop();
}
cout<<endl;

/* 輸出結(jié)果:
2 5 18 21 27 34 35 41 47 61 62 67 69 69 71 78 81 91 92 95
99 95 94 91 82 67 64 58 53 45 42 38 36 27 26 24 16 12 4 0*/

//set:
set<int> set1;
set<int,Mygreater<int>> set2;

for(int i=0;i<20;i++){
   set1.insert(rand()%100);
   set2.insert(rand()%100);
}

for(int a:set1){
    cout<<a<<" ";
}
cout<<endl;

for(int a:set2){
    cout<<a<<" ";
}
cout<<endl;

/* 輸出結(jié)果
3 6 16 22 23 29 37 40 41 46 47 53 62 64 70 73 88 90 93
78 68 64 59 57 50 48 44 42 41 35 33 29 11 6 5 1*/

泛型算法和綁定器

本文題目: 八、C++STL 6大組件-你必知必會的編程利器
網(wǎng)站路徑:http://chinadenli.net/article34/dsoipse.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站設(shè)計(jì)、App設(shè)計(jì)、網(wǎng)站維護(hù)、品牌網(wǎng)站制作、定制開發(fā)、面包屑導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)