常用容器及常用算法-創(chuàng)新互聯(lián)

vector容器 vector基本概念

vector與普通數(shù)組的區(qū)別在于,數(shù)組時(shí)靜態(tài)空間,而vector支持動態(tài)擴(kuò)展。

成都創(chuàng)新互聯(lián)公司總部坐落于成都市區(qū),致力網(wǎng)站建設(shè)服務(wù)有做網(wǎng)站、網(wǎng)站制作、網(wǎng)絡(luò)營銷策劃、網(wǎng)頁設(shè)計(jì)、網(wǎng)站維護(hù)、公眾號搭建、小程序制作、軟件開發(fā)等為企業(yè)提供一整套的信息化建設(shè)解決方案。創(chuàng)造真正意義上的網(wǎng)站建設(shè),為互聯(lián)網(wǎng)品牌在互動行銷領(lǐng)域創(chuàng)造價(jià)值而不懈努力!

動態(tài)擴(kuò)展是指尋找更大的內(nèi)存空間,將原數(shù)據(jù)拷貝至新空間,并釋放原空間。

  • v.begin():第一個(gè)元素

  • v.rbegin():最后一個(gè)元素

  • v.end():最后一個(gè)元素的后一個(gè)位置

  • v.rend():第一個(gè)元素的前一個(gè)位置

vector構(gòu)造函數(shù)
vectorv1;? ? ? ? ? ? ? ? ? ? ? ? //默認(rèn)構(gòu)造函數(shù)                            
vectorv2(v1.begin(), v1.end());? //將[v1.begin(), v1.end())之間的數(shù)據(jù)拷貝至v2
vectorv3(n, elem);? ? ? ? ? ? ? ?//構(gòu)造含有n個(gè)elem的vector容器
vectorv4(v3);? ? ? ? ? ? ? ? ? ? //拷貝構(gòu)造函數(shù)
vector賦值操作
vectorv1;
//對v1進(jìn)行初始化
for(int i = 0; i< 10; i++){
? ? v1.push_back(i);
}
//利用“=”對v2賦值
vectorv2 = v1;
//利用assign進(jìn)行賦值
vectorv3;
v3.assign(v1.begin(), v1.end());
vectorv4;
v4.assign(n, elem);
vector的容量和大小
v.empty();? ? ? ? ? ? ? ? //判斷vector是否為空
v.capacity();? ? ? ? ? ? ?//返回vector容器的容量
v.size();? ? ? ? ? ? ? ?  //返回容器中元素的個(gè)數(shù)
v.resize(int num);? ? ? ? //重新指定容器長度為num,若容器變長,用默認(rèn)值填充,若容器變短,刪除多余元素
v.resize(int num, elem);  //指定填充的默認(rèn)值為elem
vector的插入和刪除
v.push_back(elem);? ? ? ? ? ? ? ? //尾部插入元素elem
v.pop_back();? ? ? ? ? ? ? ? ? ?  //刪除最后一個(gè)元素
v.insert(pos, elem);? ? ? ? ? ? ? //在迭代器指向位置pos前插入元素elem
v.insert(pos, int count, elem);   //在迭代器指向位置pos前插入count個(gè)元素elem
v.erase(pos);                     //刪除迭代器指向的元素
v.erase(start, end);              //刪除迭代器從start到end之間的元素
v.clear();                        //刪除容器內(nèi)所有元素
vector數(shù)據(jù)存取
//返回索引index指向的元素
v[index];
v.at(index);
//返回第一個(gè)元素
v.front();
//返回最后一個(gè)元素
v.back();
vector互換容器
vectorv1;
vectorv2;
//...對v1和v2進(jìn)行初始化
v1.swap(v2);//將v1的元素與v2的元素互換
vector(v1).swap(v1);//利用匿名對象收縮空間
vector預(yù)留空間
vectorv;
v.reserve(int len);//預(yù)留len個(gè)元素長度,預(yù)留位置未初始化,不可訪問
map容器 map基本概念

map中每個(gè)元素都是pair,pair中的第一個(gè)元素為key,第二個(gè)元素為value,所有元素都會根據(jù)元素的鍵值自動排序,可以根據(jù)key值快速找到value值。

map不允許容器內(nèi)含有重復(fù)key值元素,multimap允許容器內(nèi)含有重復(fù)key值元素。

map構(gòu)造和賦值
//map構(gòu)造和賦值
void test(){
? ? mapm;//默認(rèn)構(gòu)造
? ? m.insert(pair(1, 10));
? ? m.insert(pair(3, 30));
? ? m.insert(pair(2, 20));
? ? mapm2(m);//拷貝構(gòu)造
? ? mapm3 = m2;//賦值
}
//打印輸出map中的元素
void printMap(map&m){
? ? for(map::iterator it = m.begin(); it !=m.end(); it++){
? ? ? ? cout<<"key = "<<(*it).first<<" value = "<second<
map大小和交換 map的大小
mapm;
int s = m.size();//返回容器m中含有幾對鍵值對
bool e = m.empty();//判斷容器m是否為空
map的交換
mapm1;
mapm2;
//向m1和m2中插入元素
m1.swap(m2);//交換m1和m2中的元素
map插入和刪除 map的插入
//map的插入操作
mapm;
//第一種插入操作
m.insert(pair(key1, value1));
//第二種插入操作
m.insert(make_pair(key2, value2));
//第三種插入操作
m.insert(map::value_type(key3, value3));
//第四種插入操作
m[key4] = value4;
//對于m[key]的方式,若遍歷過程中,不存在鍵值key,則會自動插入一個(gè)鍵值為key,值為0的鍵值對
map的刪除
mapm;
//向容器m中插入若干元素...
//刪除指定位置的元素,如
m.erase(m.begin());
//按key刪除元素
m.erase(key);
//刪除指定區(qū)間內(nèi)的元素,如
m.erase(m.begin(), m.end());
//清空容器
m.clear();
map查找和統(tǒng)計(jì)
//map的查找
mapm;
//向容器m中插入若干元素...
//按key查找元素,結(jié)果返回迭代器
map::iterator pos = m.find(key);
//若pos=m.end(),說明未找到

//map的統(tǒng)計(jì)
int c = m.count(key);
//對于map來說,count的值只可能是0或1
map容器的排序
//map按key從大到小排序
class myCompare{
public:
? ? bool operator()(const int &v1, const int &v2){
? ? ? ? return v1 >v2;
? ? }
}
mapm;

//map按value從小到大排序
//將map中的鍵值對插入到vector中,再利用sort對vector排序
static bool cmp(const pair&a, const pair&b){
? ? return a.second< b.second;
}
mapm;
vector>v;
for(map::iterator map_it = m.begin(); map_it != m.end(); map_it++){
? ? v.push_back(pair(map_it->first), map_it->second);
}? ? 
//排序
sort(v.begin(), v.end(), cmp);
map和unordered_map的區(qū)別
  1. 實(shí)現(xiàn)不同

unordered_map底層是用哈希表實(shí)現(xiàn)的

map底層是用紅黑樹實(shí)現(xiàn)的

  1. 性能不同

unordered_map是不按鍵值排序的,插入的時(shí)間是O(logn),查詢時(shí)間是O(1)

map是按鍵值排序的,插入的時(shí)間是O(logn),查詢時(shí)間是O(logn)

  1. 使用范圍不同

unordered_map的使用比較局限,它的key只能是int、double等基本類型以及string,而不能是自己定義的結(jié)構(gòu)體

map可以支持所有類型的鍵值對

遍歷算法 for_each

for_each(iterator beg, iterator end, _func);//遍歷容器元素

beg:開始迭代器,end:結(jié)束迭代器,_func:函數(shù)或函數(shù)對象

transform

transform(iterator beg1, iterator end1, iterator beg2, _func)

//搬運(yùn)容器到另一個(gè)容器中,目標(biāo)容器需要提前開辟空間(resize)

beg1:源容器開始迭代器,end1:源容器結(jié)束迭代器,beg2:目標(biāo)容器開始迭代器

_func:函數(shù)或函數(shù)對象

查找算法 find

find(iterator beg, iterator end, value)

查找指定元素,找到返回指定元素的迭代器,找不到返回結(jié)束迭代器end()。

find_if

find_if(iterator beg, iterator end, _Pred)

_Pred:函數(shù)或謂詞(返回bool類型的仿函數(shù))

按值查找元素,找到返回指定位置迭代器,找不到返回結(jié)束迭代器位置

adjacent_find

adjacent_find(iterator beg, iterator end);

查找相鄰重復(fù)元素,返回相鄰元素的第一個(gè)位置的迭代器,若未找到,返回結(jié)束迭代器位置。

binary_search

bool binary_search(iterator beg, iterator end, value);

查找指定元素,查找到返回true,否則返回false,只適用于有序序列。

count

count(iterator beg, iterator end, value);

統(tǒng)計(jì)指定元素個(gè)數(shù)

count_if

count_if(iterator beg, iterator end, _Pred);

按條件統(tǒng)計(jì)元素出現(xiàn)次數(shù)

排序算法 sort

sort(iterator beg, iterator end, _Pred);

sort(iterator beg, iterator end);升序排列

sort(iterator beg, iterator end, greater());降序排列

random_shuffle

srand((unsigned int)time(NULL));//隨機(jī)數(shù)種子

random_shuffle(iterator beg, iterator end);

merge

merge(iterator beg1, iterator end1, iterator beg2, iterator end2, iterator dest);

dest:目標(biāo)容器開始迭代器

將兩個(gè)有序容器的數(shù)據(jù)合并,并有序存儲到另一個(gè)容器內(nèi)。(需要提前開辟空間)

reverse

reverse(iterator beg, iterator end);

拷貝和替換算法 copy

copy(iterator beg, iterator end, iterator dest);//需要提前開辟空間

將容器內(nèi)指定范圍的元素復(fù)制到另一個(gè)容器內(nèi)。

replace

replace(iterator beg, iterator end, old value, new value);

將容器內(nèi)指定范圍的元素中所有的old value替換為new value。

replace_if

replace(iterator beg, iterator end, _Pred, new value);

將容器內(nèi)指定范圍的元素中所有滿足要求的old value替換為new value。

swap

swap(container c1, container c2);

互換兩個(gè)容器內(nèi)的元素。

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

分享標(biāo)題:常用容器及常用算法-創(chuàng)新互聯(lián)
新聞來源:http://bm7419.com/article18/ipegp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、做網(wǎng)站、電子商務(wù)移動網(wǎng)站建設(shè)、域名注冊品牌網(wǎng)站建設(shè)

廣告

聲明:本網(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)