1、容器
vector容器的初始化有一下幾個函數(shù)
std::vector<T> v; std::vector v(n); std::vector v(n,i); std::vector v(v0); std::vector v(it1,it2);
支持的操作有
1.push_back? 在數(shù)組的最后添加一個數(shù)據(jù)
2.pop_back??? 去掉數(shù)組的最后一個數(shù)據(jù)
3.at??????????????? 得到編號位置的數(shù)據(jù)
4.begin?????????? 得到數(shù)組頭的指針
5.end???????????? 得到數(shù)組的最后一個單元+1的指針
6.front??????? 得到數(shù)組頭的引用
7.back??????????? 得到數(shù)組的最后一個單元的引用
8.max_size???? 得到vector最大可以是多大
9.capacity?????? 當(dāng)前vector分配的大小
10.size?????????? 當(dāng)前使用數(shù)據(jù)的大小
11.resize???????? 改變當(dāng)前使用數(shù)據(jù)的大小,如果它比當(dāng)前使用的大,者填充默認(rèn)值
12.reserve????? 改變當(dāng)前vecotr所分配空間的大小
13.erase???????? 刪除指針指向的數(shù)據(jù)項
14.clear????????? 清空當(dāng)前的vector
15.rbegin??????? 將vector反轉(zhuǎn)后的開始指針返回(其實就是原來的end-1)
16.rend????????? 將vector反轉(zhuǎn)構(gòu)的結(jié)束指針返回(其實就是原來的begin-1)
17.empty??????? 判斷vector是否為空
18.swap???????? 與另一個vector交換數(shù)據(jù)
2、標(biāo)準(zhǔn)庫算法
bind
bind是這樣一種機制,它可以預(yù)先把指定可調(diào)用實體的某些參數(shù)綁定到已有的變量,產(chǎn)生一個新的可調(diào)用實體,這種機制在回調(diào)函數(shù)的使用過程中也頗為有用。C++98中,有兩個函數(shù)bind1st和bind2nd,它們分別可以用來綁定functor的第一個和第二個參數(shù),它們都是只可以綁定一個參數(shù)。各種限制,使得bind1st和bind2nd的可用性大大降低。C++11中,提供了std::bind,它綁定的參數(shù)的個數(shù)不受限制,綁定的具體哪些參數(shù)也不受限制,由用戶指定,這個bind才是真正意義上的綁定,有了它,bind1st和bind2nd就沒啥用武之地了,因此C++11中不推薦使用bind1st和bind2nd了,都是deprecated了。代碼如下
#include < functional>
intFunc(int x,int y);
auto?bf1?=?std::bind(Func,?10,?std::placeholders::_1);
bf1(20);///<?same?as?Func(10,?20)
classA
{
public:
intFunc(intx,inty);
};
A?a;
auto?bf2?=?std::bind(&A::Func,?a,?std::placeholders::_1,?std::placeholders::_2);
bf2(10,?20);///<?same?as?a.Func(10,?20)
std::function?bf3?=?std::bind(&A::Func,?a,?std::placeholders::_1,?100);
bf3(10);///<?same?as?a.Func(10,?100)
(1)bind預(yù)先綁定的參數(shù)需要傳具體的變量或值進(jìn)去,對于預(yù)先綁定的參數(shù),是pass-by-value的
(2)對于不事先綁定的參數(shù),需要傳std::placeholders進(jìn)去,從_1開始,依次遞增。placeholder是pass-by-reference的
(3)bind的返回值是可調(diào)用實體,可以直接賦給std::function對象
(4)對于綁定的指針、引用類型的參數(shù),使用者需要保證在可調(diào)用實體調(diào)用之前,這些參數(shù)是可用的
(5)類的this可以通過對象或者指針來綁定