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

淺談C++標(biāo)準(zhǔn)庫

 更新時間:2021年08月18日 17:16:05   作者:wenny-kiki  
C++標(biāo)準(zhǔn)庫是一組C++模板類,提供了通用的編程數(shù)據(jù)結(jié)構(gòu)和函數(shù),本文簡單講解C++標(biāo)準(zhǔn)庫包含的一些內(nèi)容,可能會對小伙伴的學(xué)習(xí)或工作有一定的幫助,大家一起來看看吧

C++模板

模板是泛型編程的基礎(chǔ),泛型編程即以一種獨(dú)立于任何特定類型的方式編寫代碼

模板是創(chuàng)建泛型類或函數(shù)的藍(lán)圖或公式

可以使用模板來定義函數(shù)和類

//函數(shù)模板
template <typename type> ret-type func-name(parameter list)
{
   // 函數(shù)的主體
}

//類模板
template <class type> class class-name {
.
.
}

C++標(biāo)準(zhǔn)庫

①標(biāo)準(zhǔn)函數(shù)庫--繼承自C語言

​ I/O;字符串和字符處理;數(shù)學(xué);時間、日期和本地化;動態(tài)分配;其他;寬字符函數(shù)

②面向?qū)ο箢悗?-類及相關(guān)函數(shù)的集合

​ C++ I/O;String類;數(shù)值類;STL容器類;STL算法;STL函數(shù)對象;STL迭代器;STL分配器;本地化庫;異常處理類;雜項支持庫

C++ 面向?qū)ο箢悗?br />

string

可以使用下標(biāo)和迭代器訪問

string s1; //初始化字符串,空字符串,可變長
string s2 = "I am wenny"; //直接初始化
string s3 = string(6,'c'); //拷貝初始化
//cin>>s1;  //遇到空白停止讀取
cout<<s2;
str.c_str(); //將string型str使用c_str()變?yōu)樽址麛?shù)組,可以使用printf進(jìn)行輸出
cout<<s2[0];  //可以使用下標(biāo)引用
s2=s1;  //用s1代替s2
s1=s1+s2;  //連接s1和s2

getline(cin,s3); //獲取有空白符的一整行內(nèi)容,按回車鍵結(jié)束輸入,不能輸入字符數(shù)組;輸入遺留在輸入緩沖的換行符消除
getline(cin,s3,'#')  //輸入一串字符(無論多少個回車鍵),只要是在‘#'之前的字符都會讀取并保存
s3.erase(10,8);  //刪除s3[10]開始的8個字符,時間復(fù)雜度O(n)
s3.insert(2,"bbb"); //在s3中下標(biāo)為2的字符前插入字符串,時間復(fù)雜度O(n)
s3.insert(it,it2,it3);  //迭代器,表示串[it2,it3)將被插入在it的位置

cout<<s2.find("am",0);  //返回子串位置,第二個參數(shù)是查找起始位置,如果沒有找到返回string::npos;時間復(fù)雜度O(nm),n和m分別為str和str2的長度
s2.empty();
s2.size();
s2.substr(pos,len); //從pos號位開始,長度為len的子串,時間復(fù)雜度O(len)
s2.replace(pos,len,str2);  //從pos號為開始、長度為len的子串替換為str2;時間復(fù)雜度O(str.length())

標(biāo)準(zhǔn)模板庫

--實現(xiàn)多種流行和常用的算法和數(shù)據(jù)結(jié)構(gòu)

幫助文件:c++API.chm(最后整理于2/26/2006)

​ cppreference-zh-20210212.chm

template <typename T>
inline void showset(set<T> v){
    for(typename set<T>::iterator it=v.begin();it!=v.end();it++)
        cout<<*it<<" ";
    cout<<endl;
}

vector

翻譯為向量--”變長數(shù)組“;可以不用初始化就必須指定大小的數(shù)組

可以通過下標(biāo)和迭代器訪問

常見用途:1.儲存數(shù)據(jù):元素個數(shù)不確定時 2.用鄰接表存儲圖

//初始化
vector<int> v1;
vector<vector<int>> v2;  //相當(dāng)于變長二維數(shù)組
vector<int> v[100]; //相當(dāng)于二維數(shù)組,第一維已經(jīng)固定長度
vector<int> v3={1,2,3,4};
vector<string> v4(3,"hi");
vector<int> v5(4);  //默認(rèn)初始化為0,字符串默認(rèn)為空
//操作
v1.push_back(2); //向末尾添加對對象,時間復(fù)雜度O(1)
v1.pop_back(); //刪除尾部的對象,時間復(fù)雜度O(1)
v1.empty(); //返回bool值
v3.size();  //返回vector種元素的個數(shù),時間復(fù)雜度O(1)
v1.clear(); //刪除所有元素,時間復(fù)雜度O(n)
v1.insert(v1.begin(),3); //插入一個或多個元素,時間復(fù)雜度O(n)
v1.erase(v1.begin());  //刪除一個或多個元素,時間復(fù)雜度O(n)
v1=v3;
//使用了迭代器的循環(huán)體,不要向迭代器所屬容器添加元素
cout<<v1[0]; //返回v種第0個位置上元素的引用
cout<<(v1==v5);  //相等當(dāng)且僅當(dāng)元素數(shù)量相同且對應(yīng)位置的元素值都相同

set

翻譯為集合

與vector大致相同,但set中的元素有序且唯一;添加元素時自動排序,元素本來存在則動作不執(zhí)行

只能通過迭代器訪問

常見用途:需要去重卻不方便直接開數(shù)組

set<int> s1={9,8,7,6,5,4};  //從小到大自動排序
showset(s1);
//cout<<s1[1]; //不能使用下標(biāo)引用

set<string> s2={"hello","world","apple"};  //字典序排序
showset(s2);
    
s1.insert(9);  //已存在沒有插入動作,時間復(fù)雜度O(logn)
showset(s1);
s2.insert("banana"); //添加并排序
showset(s2);

set<int>::iterator it s1.find(2); //返回value對應(yīng)的迭代器,時間復(fù)雜度O(logn)
s1.erase(); //參數(shù)是迭代器,時間復(fù)雜度為O(1);參數(shù)是value,時間復(fù)雜度是O(logn)

list

雙向鏈表

list<int> l1={6,7,3,4};
showlist(l1);
list<char> l2(5,'a');
showlist(l2);

l1.sort(); //list自己的排序函數(shù),無參數(shù)
showlist(l1);

map

翻譯為映射

運(yùn)用了hash地址映射的思想,即key-value;

將一個類型的變量映射至另一類型;

map的內(nèi)部實現(xiàn)是一棵紅黑樹

可以通過下標(biāo)和迭代器訪問

常見用途:建立字符串與整數(shù)之間的映射;判斷大整數(shù)或其它類型數(shù)據(jù)是否存在的題目,可以把map當(dāng)bool數(shù)組用;

void showmap(map<string,int> v){
    for(map<string,int>::iterator it=v.begin();it!=v.end();it++)
        cout<<it->first<<" "<<it->second<<endl;  //first表示key,second表示value
    cout<<endl;
}

int main()
{
    map<string,int> m1;  //第一個參數(shù)是key,第二個參數(shù)是value
    m1["jojo"]=100;
    m1["kiki"]=99; //會以鍵從小到大的順序自動排序

    cout<<m1["jojo"]<<endl;  
    cout<<m1.count("wenny"); //判斷是否存在key,返回1或0
    cout<<m1["test"]<<endl; //不存在key,則顯示0,但會插入到map中
    
    showmap(m1);
    m1.erase("kiki");  //通過關(guān)鍵字刪除元素,時間復(fù)雜度O(logn);直接刪除迭代器時間復(fù)雜度O(1)
    showmap(m1);
    m1.insert(pair<string,int>("harr",89));  //增加元素
    showmap(m1);
    m1.clear();  //清空元素
    m1.find(b);  //確定map中是否有string對象b的映射,若沒有函數(shù)返回m1.end();時間復(fù)雜度O(logn)
    return 0;

}

queue

翻譯為隊列,實現(xiàn)先進(jìn)先出

常見用途:實現(xiàn)廣度優(yōu)先搜索

queue<int> q1;
q1.front(); //因為是限制性數(shù)據(jù)結(jié)構(gòu),只能通過front()來訪問隊首元素,back()來訪問隊尾元素
q1.back();
q1.push(1);
q1.pop();
q1.empty();
q1.size();

priority_queue

優(yōu)先隊列,底層用堆實現(xiàn);隊首元素一定是優(yōu)先級最高的那個

常見用途:貪心問題;對dijkstra算法進(jìn)行優(yōu)化

priority_queue<int,vector<int>,greater<int>> q;  //從大到小排序,數(shù)字越小優(yōu)先級越大
priority_queue<int,vector<int>,less<int>> q2;  //從小到大排序,數(shù)字越大優(yōu)先級越大;默認(rèn)
q.push(3);  //入隊,時間復(fù)雜度O(logn)
q.push(2);  
q.push(4);
cout<<q.top();  //獲得隊首元素,即堆頂元素
q.pop();  //出隊,時間復(fù)雜度O(logn)
cout<<q.top();
cout<<q.empty();
struct fru{
	string name;
	int price;
	bool operator < (const fru &b) const{
		return price>b.price;
	}
};
priority_queue<fru> q3; //按照重載的運(yùn)算符<排序
fru f1,f2,f3;
f1.name = "peach";
f1.price = 3;
f2.name = "apple";
f2.price = 1;
q3.push(f1);
q3.push(f2);
cout<<endl<<q3.top().name<<" "<<q3.top().price;
struct cmp{
	bool operator () (const fru &a,const fru &b){
		return a.price>b.price;
	}
};
priority_queue<fru,vector<fru>,cmp> q4; //重寫排序規(guī)則
q4.push(f1);
q4.push(f2);
cout<<endl<<q4.top().name<<" "<<q4.top().price;

stack

棧,后進(jìn)先出

常見用途:模擬實現(xiàn)一些遞歸

stack<int> s;
s.push(1);  //入棧,時間復(fù)雜度O(1)
s.push(2);
s.push(3);
s.pop();  //出棧,時間復(fù)雜度O(1)
cout<<s.top()<<endl;  //獲得棧頂元素,時間復(fù)雜度O(1)
cout<<s.empty()<<endl;
cout<<s.size()<<endl;

pair

可以看作一個內(nèi)部有兩個元素的結(jié)構(gòu)體

常見用途:用來代替二元結(jié)構(gòu)及其構(gòu)造函數(shù),節(jié)省編碼時間;作為map的鍵值對進(jìn)行插入

struct pair{
	typename first;
	typename second;
};
pair<string,int> p;
p.first = "haha";
p.second = 5;
p = make_pair("xixi",55);  //臨時構(gòu)建一個pair
p = pair<string,int>("heihei",555);  //臨時構(gòu)建一個pair
cout<<(p1>=p2);  //可以直接使用比較操作數(shù)

algorithm下的常用函數(shù)

int x=-1,y=2;
double a=0.1,b=0.2;
max(x,y);  //參數(shù)只能是兩個
min(a,b);
abs(x);  //x必須是整數(shù)
swap(x,y);  //交換x和y的值
int c[3]={1,2,3};
reverse(c,c+3);  //將數(shù)組指針在[it,it2)之間的元素或容器的迭代器在[it,it2)范圍內(nèi)的元素進(jìn)行反轉(zhuǎn)
int d[10]={1,2,3};
do{
    cout<<a[0]<<a[1]<<a[2]<<endl;
}while(next_permutation(d,d+3));  //函數(shù)給出一個序列在全排列中的下一個序列,到達(dá)全排列最后一個時會返回false
fill(d,d+2,5);  //把數(shù)組或容器的[it,it2)賦為某個相同的值
sort(d,d+3);  //默認(rèn)遞增排序
//用在有序數(shù)組或容器中;時間復(fù)雜度O(log(last-first));返回位置的指針或迭代器
lower_bound(d,d+3,2);  //尋找第一個大于等于val的元素位置
upper_bound(d,d+3,2);  //尋找第一個大于val的元素位置

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

相關(guān)文章

  • M1 Macbook vscode C++ debug調(diào)試實現(xiàn)

    M1 Macbook vscode C++ debug調(diào)試實現(xiàn)

    本文主要介紹了M1 Macbook vscode C++ debug調(diào)試,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-08-08
  • 詳解C++ 多態(tài)的兩種形式(靜態(tài)、動態(tài))

    詳解C++ 多態(tài)的兩種形式(靜態(tài)、動態(tài))

    這篇文章主要介紹了C++ 多態(tài)的兩種形式,幫助大家更好的理解和學(xué)習(xí)c++,感興趣的朋友可以了解下
    2020-08-08
  • C語言示例講解for循環(huán)的用法

    C語言示例講解for循環(huán)的用法

    初學(xué)C語言,常常遇到for循環(huán)中嵌套個for循環(huán),初學(xué)者對于這種形式總是一知半解,這次我就整理了常見的for循環(huán)嵌套for循環(huán)的題目,我們一起爭取一舉拿下這類題。學(xué)廢他們,以后再見到就不怕啦!每天都要學(xué)一點(diǎn)呀。加油,奮斗的我們
    2022-06-06
  • 淺談C++流庫的基本結(jié)構(gòu)

    淺談C++流庫的基本結(jié)構(gòu)

    本文主要介紹了淺談C++流庫的基本結(jié)構(gòu),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-04-04
  • C語言數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的建立與基本操作

    C語言數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的建立與基本操作

    這篇文章主要介紹了C語言數(shù)據(jù)結(jié)構(gòu) 雙向鏈表的建立與基本操作的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 如何利用C語言位運(yùn)算解決只出現(xiàn)一次的數(shù)字

    如何利用C語言位運(yùn)算解決只出現(xiàn)一次的數(shù)字

    這篇文章主要給大家介紹了關(guān)于如何利用C語言位運(yùn)算解決只出現(xiàn)一次的數(shù)字的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • 常用C/C++預(yù)處理指令詳解

    常用C/C++預(yù)處理指令詳解

    預(yù)處理指令提供按條件跳過源文件中的節(jié)、報告錯誤和警告條件,以及描繪源代碼的不同區(qū)域的能力。使用術(shù)語“預(yù)處理指令”只是為了與 C 和 C++ 編程語言保持一致。在 C# 中沒有單獨(dú)的預(yù)處理步驟;預(yù)處理指令按詞法分析階段的一部分處理。
    2014-11-11
  • C++中命名空間(namespace)詳解及其作用介紹

    C++中命名空間(namespace)詳解及其作用介紹

    考慮一種情況,當(dāng)我們有兩個同名的人,Zara,在同一個班里。當(dāng)我們需要對它們進(jìn)行區(qū)分我們必須使用一些額外的信息和它們的名字,比如它們生活在不同的區(qū)域或者興趣愛好什么的,在C++程序中也會遇到同樣的情況,所以命名空間就此產(chǎn)生
    2022-08-08
  • C++單例模式的懶漢模式和餓漢模式詳解

    C++單例模式的懶漢模式和餓漢模式詳解

    這篇文章主要為大家詳細(xì)介紹了C++懶漢模式和餓漢模式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • C語言之實現(xiàn)棧的基礎(chǔ)創(chuàng)建

    C語言之實現(xiàn)棧的基礎(chǔ)創(chuàng)建

    這篇文章主要介紹了C語言之實現(xiàn)棧的基礎(chǔ)創(chuàng)建,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07

最新評論