學(xué)了之后發(fā)現(xiàn),太棒了,終于可以像python一樣,不用那么麻煩了
成都創(chuàng)新互聯(lián)是一家專注于成都網(wǎng)站設(shè)計、做網(wǎng)站、成都外貿(mào)網(wǎng)站建設(shè)公司與策劃設(shè)計,嶺東網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)十年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:嶺東等地區(qū)。嶺東做網(wǎng)站價格咨詢:13518219792這里面的東西其實都是可以類比到python那里面的 比如vector就是list,map就是dict,set就是會知道排序的集合,string就不多說了,pair就是小型的dict 就剩下了stack與queue以及bitset 前兩者也是很好理解,queue就是排隊一樣,大的特點是先進先出,而stack就像只有一口的羽毛球筒,后進先出,兩者是相反的,而priority_queue則是會自動排序的queue bitset不就是 bit set嗎?使用進制的方式來表示set(因為是不會有重復(fù)的位置)下面有解釋創(chuàng)建vector
兩種
直接創(chuàng)建,為空
vectorabc;
創(chuàng)建還有值的
vectorabc={10,10};
添加
兩種
類似append的
abc.push_back(11);
在指定位置插入的
(使用迭代器作為位置選擇)
插入一個數(shù)
abc.insert(abc.begin(),1);
插入2個1
abc.insert(abc.begin(),2,1);
刪除
刪一個,取下標(biāo)
abc.erase(abc.begin());
刪多個,取切片
abc.erase(abc.begin(),abc.begin()+2);
排序
自己指定位置排序
sort(v.begin(),v.end());
倒置
reverse(v.begin(),v.end());
清空
v.clear();
判斷是否為空
v.clear();
取值
類似于python,但是不能切片,只能夠取一個
v[0]
長度
cout<< abc.size();
遍歷
1.用下標(biāo),不說了
2.用迭代器
for(it=vector.begin();it!=vector.end();it++){cout<<*it<<' ';
}
沒啥說的
set創(chuàng)建也是兩種,不贅敘
setabc={10,60};
添加元素
由于會自動排序,所以也就沒必要有插入的位置
abc.insert(10);
刪除
由于是不重復(fù)的,所以這個是刪除指定的元素
abc.erase(10);
還有不少的函數(shù)就不多贅敘了
q.clear(); //清空q
q.empty(); //判斷q是否為空,若是返回1,否則返回0
q.size(); //返回q中元素的個數(shù)
q.find(x); //在q中查找x,返回x的迭代器,若x不存在,則返回指向q尾部的迭代器即 q.end()
然后就是尋找每個stl的end或是begin其實都是使用了迭代器的方式,所以也就沒什么好說的了
string
把string提前,是因為這三個都是一類的可以使用迭代器的東西,并且用法都類似創(chuàng)建
還是類似的兩者
無自帶的
string s;
自帶的
string s2 = "Hello";
添加
1.“+”
str += phrase;
但是注意
string s2 = "Hello" + s + "xxx" + "xxx";
0 1 2 3
相加必須是string類與“xxxx”類進行相加
上面可以是因為0與1合并為了string,所以和2相加的時候沒事
后面是一樣的
s2 = "Hello" + "xxx" + s;
0 1 2
不行,因為0與1相加的時候,兩者都不是string
2.append
s2.append("xxxx");
和+類似
3.insert
// 插入
// 下標(biāo)
s2.insert(0,2,'s');
// 迭代器插入
s2.insert(s2.begin(),'s');
// 類似下標(biāo)的方式
s2.insert(s2.begin(),2,'s');
// 表示插入兩個
刪除
string x1("value");
string x2("value");
string x3("value");
string x4("value");
x1.erase();//執(zhí)行后,s1為空
x2.erase(0,2); //執(zhí)行后,s2為”lue”
x3.erase(x3.begin());//執(zhí)行后,s3為”alue”
// 類似取下標(biāo)的方式
x4.erase(x4.begin(),++x4.begin());//執(zhí)行后,s4為”alue”
// 切片的方式,和python一樣
replace
老熟人了,但是不一樣,這是通過下標(biāo)來刪除,但是通過find可以達到python的效果
string s2="xxxx";
// replace函數(shù),就是insert與erase的結(jié)合體
s2.replace(0,2,"aaa");
// 輸出 aaaxxx
find
cout<< s2.find("x")<< endl;
// 返回找到的第一個下標(biāo)
cout<< s2.rfind("a");
// 返回找到的最后一個的小標(biāo)
map老熟人了,類似字典
創(chuàng)建
maphaha;
添加
類python
haha["a"]=1;
比較常用的函數(shù)
因為容易理解
haha.clear(); 清空
haha.count("a") !!!這個只用于key/關(guān)鍵字,因為是惟一的,所以只要0/1
empty() 如果map為空則返回true
erase() 刪除一個 關(guān)鍵字+值
find() 查找一個關(guān)鍵字的迭代器(下面講迭代器怎么用)
insert() 插入 關(guān)鍵字+值
size() 返回map中元素的個數(shù)
重點,關(guān)于map迭代器怎么用捏
因為這里雖然有順序(按加入的順序作為迭代器的順序)
但是怎么輸出這個位置的關(guān)鍵字還是值捏?
auto it = haha.begin();
// frist結(jié)構(gòu)/數(shù)組表示的是關(guān)鍵字
// second的則是值
// 因為哪怕你迭代了,也不知道要的是哪一個數(shù)據(jù)
// 所以在使用迭代器之后要用frist指定是哪一位
cout<< it->first<< endl; //輸出的是關(guān)鍵字
cout<< it->second;// 輸出的是值
pair沒什么好說的
就是單個map
創(chuàng)建
pairanon;
pairauthor("James","Joy");
和map類似
pairp1;
p1.first = 1;
p1.second = 2.5;
cout<
沒什么好說的
不過注意一點,就是兩個pair之間的比較
paira1(333,"a");
paira2(666,"b");
cout<< (a1a1(666,"a");
paira2(666,"b");
cout<< (a1a,所以1
queue先進先出,無迭代器,所以每次只能看到一個元素
創(chuàng)建
queuelala;
second
queuelala({1,23,4});
也可這樣子,順序是1,23,4
常見函數(shù)
push() 在隊尾插入一個元素
pop() 刪除隊列第一個元素
size() 返回隊列中元素個數(shù)
empty() 如果隊列空則返回true
front() 返回隊列中的第一個元素
back() 返回隊列中最后一個元素
因為不能夠使用迭代器了
所以窺探容器只能使用front/back
也不能夠使用clear了,所以只能
while (!lala.empty())
{lala.pop();
}
cout<< lala.size();
priority_queue,其實就是堆,也有幸了解了堆的原理,就是那棵樹就是會排序的queue沒啥好說的
創(chuàng)建
priority_queueabc;
and以下的區(qū)別
默認(rèn)是大頂堆
//升序隊列,小頂堆
priority_queue, greater>pq;
就是隊伍最前的是最小的
//降序隊列,大頂堆
priority_queue, less>pq;
就是隊伍最前的是大的
其余的操作就和queue沒什么區(qū)別呢捏
stack這個也沒什么好說的
就是后進先出,想象成一個羽毛球筒即可
創(chuàng)建
stacks1();
second
stacks1({1,23,4});
加入順序就是1,23,4
所以最上面的是 4
常見函數(shù)
size( ) :返回棧中元素個數(shù)
top( ) :返回棧頂?shù)脑?pop( ) :從棧中取出并刪除元素
push(e) :向棧中添加元素e
empty( ) :棧為空時返回true
bitset非常簡單的理解,給你一個數(shù)組{1,2,3,8,10}
如何快速地進行表示捏?
可以醬紫
1110000101
第幾個位置為1就表示數(shù)組含有第幾個數(shù)字,然后我們又知道位置只會有一個,而且表達方式也只有 有1/無0
所以很清楚的知道為什么是 bit set 了
創(chuàng)建
創(chuàng)建空的
bitset<10>foo;
0000000000
當(dāng)然也可以導(dǎo)入東西
9的二進制的數(shù)值
bitset<5>foo(9);
01001
當(dāng)然,如果二進制的數(shù)值超過了設(shè)置的,那么就會舍棄掉高位的數(shù)值
bitset<3>foo(9);
001
原本是01001
也可以是字符串,但必須全是0/1
bitset<4>foo(string("0101"));
0101
幾種常見的函數(shù)
foo3=foo&foo2 與,foo與foo2全是1,foo3才是1
foo|foo2 或,一個是就行
~foo 取反
foo^foo2
foo<<=2 全部左移
foo>>=2 全部右移
foo.size() 返回長度(位數(shù))
foo.count() 返回1的個數(shù)
foo.any() 返回是否有1,有則是1,無則是0
foo.none() 返回是否沒有1,與上面相反
foo.set() 全都變成1
foo.set(p) 將第p + 1位變成1
foo.set(p, x) 將第p + 1位變成x
foo.reset() 全都變成0
foo.reset(p) 將第p + 1位變成0
foo.flip() 全都取反
foo.flip(p) 將第p + 1位取反
————————————————
原文鏈接:https://blog.csdn.net/ywh15387127537/article/details/88707044
特別注意
foo.set§ 將第p + 1位變成1
bit的位置是從右向左的?。。?/p>
bitset<4>foo(9);
1 0 0 1
a b c d
foo.set(1);
從右向左的第一位,取的是下標(biāo)
所以應(yīng)該是c的位置
cout<< foo;
1011
test()
這個位置是否是1,是則返回1
bitset<4>foo(9);
1 0 0 1
cout<< foo.test(0);
返回1
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧