容器與演算法

2021-08-02 02:00:06 字數 2543 閱讀 9342

operator ():過載小括號

模板中const:對型別進行嚴格檢測

const t*指向乙個常量的指標

1.類模板顯示特化

2.預設模板引數

3.成員模板

4.模板類的成員函式可以是乙個模板

已結有了vector新增成員,就需要成員函式

關鍵字typename:作為型別前的識別符號

template

class myclass

typename t::subtype * ptr;

指出subtype是t中定義的乙個型別,因此ptr是乙個指向t::subtype的指標,如果不加tynename那麼表示式被認為是t中的靜態成員subtype和ptr的乘積

除了typename修飾以為,template內的任何識別符號都可以被視為乙個值,而非乙個型別。

typename的第二個作用:在模板中替換關鍵字class

template class test

容器:

序列式容器

vector deque list

關聯式容器:

set multiset map multimap

vector

pushback分配記憶體

relloc:拷貝到新的記憶體,釋放原來的記憶體

vectors:將元素置於乙個動態陣列加以管理;

可以隨機訪問元素;

陣列尾部新增或者移除元素非常快速,但是在中部或頭部安插元素比較費時。

deques:

不需要變長,容量較小可用到array;

需要變長,容量較大用到vector;

#include

#include

#include

using

namespace

std;

int main()

cin.get();

return

0;}

list中的刪除erase()

mylist.erase(mylist.begin);

#include

#include

#include

using

namespace

std;

int main()

auto ibegin = mylist.begin(); //指標,指向了乙個迭代器,迭代器儲存了乙個位置

auto iend = mylist.end();

for(;ibegin!=iend;ibegin++)

}cin.get();

return

0;}

鏈式儲存,不允許下標訪問,只允許迭代器,鍊錶迭代器只能使用++ –

如mylist[1]就是錯誤的,只能使用迭代器訪問

clear:清空鍊錶

push_back;

push_front;

mylist.insert(ibegin,30);// 位置,值

mylist.remove(); //remove是直接根據元素的值刪除,如remove(30)就是刪除值為30的元素。

刪除或者插入跌代器的時候,begin和end都發生了變化,所以需要break;

mylist.rbegin();

mylist.rend();

mylist.merge(mylist2);//將鍊錶合併 (合併之前必須要有序,mylist1.sort() mylist2.sort(),然後在merge),merge之後的list也是有序的。

mylist.unique();unique也依賴於排序

如果沒排好序,那麼僅會刪除最後乙個重複。如果sort了,那麼會刪除所有重複的。

myset.insert();

myset.find();

迭代器本質是個指標,但是是經過優化的;ib類內部有個指標p,每次列印ib的值都是一樣的,但是ib內部的值是拒絕訪問的。

printf(「%p,%p\n」,ib, ib._ptr); 0x1234564 0000000;

printf(「%p,%p\n」,ib._ptr,ib); 每次的ib._ptr值不一樣,ib的值都是一樣

struct print

};

for_each(a,a+5,print());//遍歷每乙個元素,用結構體封裝了這個方法,然後進行過載

類模板需要例項化;

printf()是怎麼發生作用的?

//等於呼叫print的()函式,for_each第三個引數是乙個函式

//第三個引數是函式指標

//加上(),把類名當做函式名來使用

//類名當做函式名,過載了(),直接呼叫();

multiset.insert;

bind1st仿函式:可以實現一定的演算法策略

auto ifind = find_if(mylist.begin(),mylist.end(),bind1st(greater(),3 )); //過濾》3的數

C 容器與演算法

容器 某一型別資料的集合。c 標準順序容器包括 vector,list,queue vectort for int i 0 i 50 i vector c 空容器 vector c1 t 容器t的副本 vector c2 3,4 3個值為4的容器 vector c3 t.begin t.end 10...

STL常用容器與演算法

stl共有六大元件 1 容器。2 演算法。3 迭代器。4 仿函式。6 介面卡。stl容器的實現原理 stl來管理資料十分方便,省去了我們自己構建資料結構的時間.其實,stl的實現也是基於我們常見的資料結構.序列式容器 vector 陣列,元素不夠時再重新分配記憶體,拷貝原來陣列的元素到新分配的陣列中...

容器和演算法

在我們編寫每乙個程式時,都會或多或少的需要儲存一些資料,而c 在這方面只提供了幾種最基本的方法,我們可以建立區域性變數或者全域性變數在存放某個值,也可以用陣列來存放多個值。陣列是c 唯一支援的容器,但陣列並不適合用來解決所有的問題 假如我們編寫乙個程式 輸入一串字母,判斷與給定單詞是否一樣。這時候我...