vector容器

一,相較於普通數組的優勢
vector相較於數組來說更靈活(動態的數組)
二,vector支持隨機存取,
三,爲了下降空間配置的速度成倍,實際配置的大小可能比客戶端的要大,以備未來可能的擴充。增長大小就是找一快新的空間,拷貝過去,釋放原來的空間。(不是兩倍的增加,它有本身的一套算法)
單端數組
就後面一個口是開着的
在這裏插入圖片描述web

vector初始化

vector<int>v2(10,100)   //把10個100放進去
 vector<int>v(v1);     //拷貝構造
vector<int>v3(v2.begin(),v2.end());   //拷貝v2進v3(v2的起始位置到結束位置)
例:int arr[]={1,2,3,4,5};vector<int>v5(arr,arr+sizeof(arr)/sizeof(int));
v4.assign(v3.begin(),v3.end())   //將[v.begin(),v.end())中的元素賦值進去

從新指定容器的長度 resize

v1.resize(10,1000)//第二個參數是默認填充的值,不寫默認爲0;
v1.resize(3)//超過3個的刪掉,不足補0;

其餘經常使用操做

v1.front();//第一個元素    v1.back();//最後一個元素
v1.insert(v1.begin(),2,100)//在begin()的位置插入2個100,當中第一個參數爲迭代器,第二個參數能夠省略
v1.pop_back();//尾刪
v1.erase(v1.begin(),v1.end())//至關於v1.clear();清空
v4.swap(v5)   //v4與v5互換
v.empty()//判斷是否爲空
v.size()//求容器的大小
v.capacity()//v的容量(系統本身開闢的)
(vector<int>::reverse_iterator it=v.rbegin();it!=v.rend();it++)反向遍歷
小技巧:it=it+1;能夠用來判斷容器的迭代器是否支持隨機訪問(指針加一就是地址的下一個位置,即在連續的地址中成立)

巧用swap收縮內存

例:若是v的大小爲100000,其系統開闢的容量爲130000多,這可能沒有什麼關係,但v.resize(3)後,大小變爲3了,但容量仍是13萬多,太浪費了,此時你可能須要把系統開闢的容量變小算法

v.resize(3);
vector<int>(v).swap(v);

此時v的大小與系統主動開闢的空間都變爲3了。
分析:
vector(v)//利用拷貝構造初始匿名對象,假設該對象爲x,則x開闢的大小爲3,交換的本質爲指針交換,即v指向了原先x的地方,從而將多餘浪費的空間給解決了。
巧用reserve預留空間
若是自己知道它會插入多少,能夠預留那麼大空間,系統就不會每次開闢了,地址就穩定了。數組

count與count_if的用法

int times=count(v.begin(),v.end(),target);//目標元素在容器中出現了多少次。

bool compare(int score)
{
    return 90<score;
}
int times=count(v.begin(),v.end(),compare);//本身寫的一個函數,爲真就是知足題意
v是什麼類型,函數的參數就是什麼類型,由於是把v中元素拿出去比較
//因爲它們不是vector的類函數,故不要用v.去調用

本文分享 CSDN - 希境。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。svg

相關文章
相關標籤/搜索