日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++标准模板库STL【快速查找】【最全】【常用】【语法】

發布時間:2024/9/21 c/c++ 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++标准模板库STL【快速查找】【最全】【常用】【语法】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

c++標準模板庫STL【快速查找】【最全】【常用】【語法】

??? c標準模板庫STL快速查找最全常用語法
??????? vector- 變長數組
??????? set-內部自動有序且不含重復元素
??????? string-字符串處理
??????? map-鍵值對
??????? queue-隊列
??????? priority_queue-優先隊列
??????? stack-棧
??????? pair

vector- 變長數組

添加頭文件:

#include <vector>

定義vector:

vector<typename> name; //typename可以是任何基本類型,也可以是STL容器
vector<vector<typename> > name; //c++11之前會將>>視為移位操作,所以要加空格> >

定義vector數組:

vector<typename> Arrayname[arraySize]; //與vector<vector<typename> >不同的是一維已經固定長度為arraySize

訪問:

??? 通過下標訪問name[index]
??? 通過迭代器訪問
??? 迭代器類似指針,定義為vector<typename>::iterator it = name.begin()
??? 得到 it 后通過 *it 來訪問vector里的元素, *(it + i) 來訪問第i個元素
??? 循環可以這樣寫:

for(vector<typename>::iterator it = name.begin(); it != name.end(); it++){}

常用函數:

??? push_back() 尾插,時間復雜度為O(1)

pop_back() 尾刪,時間復雜度為O(1)
size() 長度,返回unsigned類型,時間復雜度為O(1)
clear() 清空,時間復雜度為O(n)
insert(it, x) 向迭代器it處插入元素x,時間復雜度為O(n)
erase()

??? 刪除單個元素 erase(it)
??? 刪除一個區間[first, last)的元素erase(first, last) //first與last都是迭代器
??? 時間復雜度均為O(n)

set-內部自動有序且不含重復元素

添加頭文件:

#include <set>

定義set

set<typename> name;

??? 1

訪問
只能通過迭代器訪問:

set<typename>::iterator it;

??? 1

得到it之后按*it來訪問set里的元素
由于除開vector和string之外的STL容器都不支持*(it + i)的訪問方式,因此只能采用下列方式枚舉:

for(set<typename>::iterator it = name.begin(); it != name.end(); it++){}

??? 1

常用函數

??? insert() 時間復雜度O(logN)

,因為底層使用紅黑樹來實現
find(value) 返回對應值為value的迭代器,時間復雜度為O(logN)
erase()

??? 刪除單個元素
??????? name.erase(it) 時間復雜度為O(1)

name.erase(value) 時間復雜度為O(logN)

刪除一個區間[first, last)內的元素 name.erase(first, last), 時間復雜度為O(last?first)

size() 時間復雜度為O(1)
clear() 清空 O(N)

string-字符串處理

添加頭文件

#include <string>

??? 1

定義

string str;
string str = "abcd"; //定義的同時初始化

??? 1
??? 2

訪問
讀入輸出只能用cin和cout
或者用c_str()將string類型轉成字符數組,再用printf()輸出

string str = "abcd";
printf("\n", str.c_str());

??? 1
??? 2

??? 通過下標訪問
??? 通過迭代器訪問
??? 與vector一樣可以通過*(it + i)的方式訪問

常用函數

??? += 拼接賦值
??? ==、!=、<、<=、>、>=比較大小,字典序
??? length()/size() 返回string長度,O(1)

insert() O(N)

??? insert(pos, string) 在pos位置插入string
??? insert(it, it2, it3) it為原字符串的欲插入位置,it2和it3為待插入字符串的首尾迭代器,[it2, it3)

erase()

??? erase(it) 刪除單個元素
??? erase(first, last) 刪除區間[first, last)的所有元素
??? erase(pos, length), 刪除pos處開始的length長度的字符個數

clear() O(1)

substr(pos, len) 返回從pos號位開始,長度為len的子串,時間復雜度為O(len)
string::npos 是一個常數,用以find函數失配時的返回值,即等于-1也等于4294967295(unsigned_int類型最大值)
find()

??? find(str2) 找子串第一次出現的位置,若不是,返回string::npos
??? find(str2, pos), 從str的pos號位開始匹配str2
??? 時間復雜度為O(mn)

??? ,其中n和m分別是str和str2的長度

replace() O(str.length())


??????? replace(pos, len, str2) 把str從pos號位開始,長度為len的子串替換為str2
??????? replace(it1, it2, str2) 把str的迭代器[it1, it2)范圍的子串替換為str2

map-鍵值對

添加頭文件

#include <map>

??? 1

定義

map<typename1, typename2> mp;

??? 1

訪問

??? 通過下標訪問,例如mp[‘a’]
??? 通過迭代器訪問

?- map<typename1, typename2>::iterator it;
?- for(map<typename1, typename2>::iterator it = mp.begin(); it != mp.end(); it++){
??? //it->first; 訪問鍵
??? //it->second; 訪問值
}

??? 1
??? 2
??? 3
??? 4
??? 5

常用函數

??? find(key) 返回key的映射的迭代器, 時間復雜度為O(logN)

, 底層紅黑樹實現

erase()

??? erase(it) O(1)

erase(key) O(logN)
erase(first, last) 刪除[first, last)區間元素,O(last?first)

size() O(1)

clear() O(N)

queue-隊列

添加頭文件

#include <queue>

??? 1

定義

queue<typename> name;

??? 1

訪問

??? front() 訪問隊首
??? back() 訪問隊尾

常用函數

??? push() O(1)

front(),back() O(1)
pop() O(1)
隊首出隊
empty() 檢測queue是否為空,返回true為空,O(1)
size() O(1)

priority_queue-優先隊列

用堆來實現,每次插入元素根據元素的優先級向上調整到堆頂
添加頭文件

#include <queue>

??? 1

定義

priority_queue< typename > name;

??? 1

訪問
只能通過top()函數來訪問隊首元素(堆頂元素),也就是優先級最高的元素

常用函數

??? push() 往堆底插入元素,向上調整,所以時間復雜度為O(logN)

top() O(1)
pop() 令隊首元素出隊,將隊尾元素復制到隊首,并向下調整,刪除隊尾,所以時間復雜度為O(logN)
empty() 檢測是否為空,O(1)
size() O(1)

優先級設置

??? 基本數據類型

priority_queue<int> q;
priority_queue<int, vector<int>, less<int> > q;//vector<int>填寫的是來承載底層heap的容器,less<int>是對第一個參數的比較類,less<int>表示數字大的優先級越大
priority_queue<int, vector<int>, greater<int> > q;//數字小的優先級大

??? 1
??? 2
??? 3

??? 結構體

struct student{
??? //學生成績
??? string s_id;
??? int s_grade;
??? friend bool operator < (student s1, student s2){
??????? //重載< 重載>號會編譯錯誤
??????? return s1.s_grade < s2.s_grade;//s_grade大的優先級高
??????? //若s_grade小的優先級高,則改為return s1.s_grade > s2.s_grade;
??? }
}
priority_queue<student> q;

??? 1
??? 2
??? 3
??? 4
??? 5
??? 6
??? 7
??? 8
??? 9
??? 10
??? 11

將重載<放到student結構體外

struct cmp{
??? bool operator (const student &s1, const student &s2){
??????? //使用引用避免復制,提高效率
??????? return s1.s_grade > s2.s_grade;
??? }
}
priority_queue<student, vector<student>, cmp> q;

??? 1
??? 2
??? 3
??? 4
??? 5
??? 6
??? 7

stack-棧

添加頭文件

#include <stack>

??? 1

定義

stack<typename > name;

??? 1

訪問
使用top()來訪問棧頂元素

常用函數

??? push() O(1)

top() O(1)
pop() O(1)
empty() O(1)
size() O(1)

pair

添加頭文件

#include <utility>

??? 1

定義

pair<typename1, typename2> p;
pair<string, int> p("jetlee", 18); //定義的同時初始化
//定義臨時pair的兩種方式
p = pair<string, int>("jetlee", 18);
p = make_pair("jetlee", 18);

? ?

訪問
pair中只有兩個元素,分別用first和second來訪問

常用函數

??? 比較操作數:==、!=、<、<=、>、>=;比較規則是先比較first,first相同時再比較second
--------------------- ?
作者:階藝勿聽 ?
來源:CSDN ?
原文:https://blog.csdn.net/sinat_25721683/article/details/79073336 ?
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

總結

以上是生活随笔為你收集整理的c++标准模板库STL【快速查找】【最全】【常用】【语法】的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中国美女一级片 | 激情视频免费观看 | 一区二区福利视频 | 欧美一区二区三区在线播放 | 三年大全国语中文版免费播放 | 日本美女影院 | 五月婷婷一区二区三区 | xxxx在线视频 | 日本一区三区 | 欧美午夜性生活 | 一级片福利| 99在线免费观看视频 | 欧美无砖砖区免费 | 日韩操操 | 国产91一区二区三区 | 免费在线看视频 | 欧美一区二区日韩一区二区 | 国产高清精品在线 | 国产精品无码人妻一区二区在线 | 男女激情久久 | 久久久久久久久网站 | av嫩草 | 日韩在线观看视频网站 | 小小姑娘电影大全免费播放 | 免费av在线网 | 亚洲综合精品视频 | 日韩黄色在线 | 亚洲国产成人精品激情在线 | 国产在线观看免费视频今夜 | 69视频在线观看免费 | 成人免费观看视频大全 | hs视频在线观看 | 国产精品国产 | 久久国产精品久久 | 欧美视频在线一区二区三区 | av一道本 | 午夜蜜桃视频 | 操欧美美女 | 亚洲一区精品视频在线观看 | 国内毛片毛片毛片毛片 | 日本视频在线播放 | 国内毛片毛片毛片毛片毛片 | 亚洲av永久无码精品三区在线 | 婷婷综合六月 | 欧美有码在线观看 | 伊人激情在线 | 四季av中文字幕 | 懂色av一区二区三区在线播放 | 中国大陆毛片 | 日本一区不卡在线观看 | 九九热国产在线 | 久久精品视频2 | 四虎啪啪 | 在线免费观看a视频 | 黄页视频在线观看 | 国产精品视频区 | 丝袜脚交国产在线观看 | 六月激情婷婷 | 日本高清免费aaaaa大片视频 | 国产三级一区二区 | 最新免费av网站 | aa在线| 国产精品aaaa | 久久久久久久久久久影院 | 精品国产乱码久久久久久浪潮 | 久久人人爽人人爽人人 | 香港一级淫片免费放 | 天堂中文在线资 | 香蕉成人av| 欧美激情精品 | 久久精品国产露脸对白 | 国产精品xxxx喷水欧美 | 精品欧美一区二区精品久久 | 好屌妞视频这里有精品 | 国产精品久久久久久69 | 国产一级爱| 一本大道综合伊人精品热热 | 桃谷绘里香番号 | 国产一页 | 日本三级网站在线观看 | 亚洲AV无码成人精品国产一区 | 久久影库| 天天干,天天爽 | 丁香四月婷婷 | 日本不卡视频在线播放 | 爱的色放在线 | 午夜成人鲁丝片午夜精品 | 日韩尤物 | 亚洲视频在线观看视频 | 在线观看 亚洲 | 亚洲国产一二三区 | 国产精品第一页在线观看 | 精品一区二区三区中文字幕 | 成人www | 亚州a级片| 久久99精品国产 | 牛牛超碰 | 三上悠亚一区二区 | 亚洲一区综合 |