在刷ccf題的時候平常作完去網上查看別的同窗怎麼作的ios
發現有使用vector後三十幾行代碼就寫出來的,雖然時間複雜度和我同樣十幾毫秒,but !我看中了它的代碼量啊!多麼的少啊!c++
因此百度了vector的使用方法,這裏,只總結一些我暫時會用到的數組
1.簡單的介紹vector:spa
在c++語言中使用,是一種順序容器,事實上和數組差很少,但它比數組更優越。通常來講數組不能動態拓展,所以在程序運行的時候不是浪費內存,就是形成越界。而vector正好彌補了這個缺陷,它的特徵是至關於可分配拓展的數組,它的隨機訪問快,在中間插入和刪除慢,但在末端插入和刪除快。/ps 官方用語指針
2.何時使用:code
若是你想使用數組來進行插入刪除查找時,其中會不可避免的遇到移動一大堆的數組元素,好比某個元素的值被刪除,那麼後面的都要向前移動的時候,推薦你使用vector,由於它不考慮數組下標啊!!!經過指針刪除元素的值能夠說很是方便了!節省了很大的時間啦,可是問題也是在這裏出現:在中間插入與刪除慢,emmm這個慢其實比大容量數組咱們本身移動快不少好伐blog
3怎麼使用:內存
頭文件:ci
#include <vector>
基本操做:it
//容量 vec.size();//向量大小 vec.max_size();//向量最大容量 vec.resize();//更改向量大小 vec.capacity();//向量真實大小 vec.empty();//向量判空 vec.shrink_to_fit(); //減小向量大小到知足元素所佔存儲空間的大小 //修改 vec.assign(); //多個元素賦值,相似於初始化時用數組進行賦值 vec.push_back();//末尾添加元素 vec.pop_back();//末尾刪除元素 vec.insert();//任意位置插入元素 vec.erase();//任意位置刪除元素 vec.swap();//交換兩個向量的元素 vec.clear();//清空向量元素 //迭代器 vec.begin();//開始指針 vec.end(); //指向最後一個元素的下一個位置 vec.cbegin(); //指向常量的開始指針,意思就是不能經過這個指針來修改所指的內容,但仍是能夠經過其餘方式修改的,並且指針也是能夠移動的。 vec.cend();//指向常量的末尾指針: //元素的訪問 vec[1]; //下標訪問,並不會檢查是否越界 vec.at(1); //at方法訪問,以上二者的區別就是at會檢查是否越界,是則拋出out of range異常 vec.front();//訪問第一個元素: vec.back();//訪問最後一個元素: int* p = vec.data(); //返回一個指針,可行的緣由在於vector在內存中就是一個連續存儲的數組,因此能夠返回一個指針指向這個數組。
4.使用案例
#include<cstdio> #include<vector> #include<iostream> #include<algorithm> using namespace std; int main() { int num; vector<int>v1; //定義vector vector<int>::iterator it; //定義vector迭代器 cout<<"請輸入5個整數:"<<endl; for(int i = 1;i <= 5;i++) { cin>>num; v1.push_back(num); } printf("\n"); for(it = v1.begin();it != v1.end();it++) cout<<*it<<" "; cout<<endl; it = v1.begin(); it += 1; cout<<"第二個數爲: "<<*it<<" "<<endl; v1.erase(it); //刪除倒數第二個數 it = v1.begin(); it += 1; cout<<"刪除以前第二個數後,新的第二個數爲:"<<*it<<" "<<endl; v1.clear(); cout<<"清空後元素個數爲:"<<v1.size()<<endl; return 0; }
能夠看見,咱們刪除一個元素後,該位置自動由後面的元素填充,不須要咱們手工移啊移,並且也不須要實現定義數組的大小,避免溢出,很方便啦