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 唯一支援的容器,但陣列並不適合用來解決所有的問題 假如我們編寫乙個程式 輸入一串字母,判斷與給定單詞是否一樣。這時候我...