STL-線性容器-vector
阿新 • • 發佈:2019-01-08
#include"iostream" #include<stdlib.h> #include<time.h> #include"vector" using namespace std; /*順序容器 vector 可變大小陣列,支援快速隨機訪問 deque 雙端佇列,支援快速隨機訪問 list 雙向連結串列,雙向順序訪問 forward_list 單項鍊表,單項順序訪問 arrey 固定大小陣列 string 與vector相似的容器,儲存字串,隨機訪問 類型別名:必須顯示的使用型別名(作用域) eg list<string>::iterator iter; vector<int>:reference a = b; iterator const_iterator size_type 無符號整形,儲存容器大小類資料 difference_type 帶符號整形,儲存兩個迭代器之間的距離 value_type 元素型別 reference元素的左值型別 value_type&含義相同 const_reference 初始化:C c; C c(c2); C c(b,e)迭代器b和e之間。C c{a,c,c,e,e...}初始化列表,新標準支援 賦值與交換 c1 = c2;c1 = {a,x,c,d,e} c1中的元素替換 assign()除了arrey其他順序容器均可 從不同但相容的型別賦值,或者拷貝子序列 v.assign(v2.begin(),v2.end()) v.assign(v3.begin(),10,"Hellow")//10個Hellow初始化賦值 a.swap(b); swap(a,b)//儘量使用非成員版的//別的容器交換是迭代器交換,arrey則是值交換 vetor .push_back() pop_back() vector .front() .back() v.empty() 大小 c.size() (不支援forward_list) c.max_size()c可以儲存的最大數目 c.insert() c.erase() c.clear()刪除c中所有元素,返回void > = < >= <= 迭代器 begin end 迭代器(尾後迭代器,左閉右開)cbegin cend 返回const_iterator型別 c.rbegin() c.rend()逆序迭代器(不支援forward_list) c.crbegin() c.crend() */ int randNum() { // int flags[11];//標誌位 int i = 0; int Y = 30; int X = 10; int temp; //驗證確實生成了[20,30]的隨機數 temp = rand() % (Y - X + 1) + X;//生成[10,30]的隨機數 return temp; } //頭元素尾元素的讀取修改和刪除 void getElement() { vector<int>v1; for (int i = 0; i < 5; i++) { v1.push_back(randNum());//從尾部插入v1.push_back() 自動擴充大小不用提前分貝記憶體 } cout << v1.front() << endl;//獲取頭部元素 v1.front() v1.front() = 11; //v1.front()當左值 修改頭部元素 v1.back() = 22; //v1.back()當左值 修改尾部元素 while (v1.size() > 0) { cout << v1.back();//取出尾部元素 v1.back() v1.pop_back();//刪除尾部元素(彈出)v1.pop() cout << " vector長度:" << v1.size()<<endl; cout << "vector_maxsize:" << v1.max_size() << endl; } } //初始化 void InitialVector() { vector<int>v1; for (int i = 0; i < 5; i++) { v1.push_back(randNum()); } vector<int>v2 = v1; vector<int>v3(v1.begin(),v1.end()-2); vector<int>v4(10, 0);//10個0 vector<string>v5; v5.assign(10, "hehehe "); for (int i = 0; i < v3.size(); i++) { cout << v3[i] << endl; } } //遍歷 void VectorTraverse() { vector<int> v(10);//提前分配記憶體大小 =進行拷貝 for (int i = 0; i < 10; i++) { v[i] = randNum();//實際是拷貝,所以得提前分配記憶體 } for (int i = 0; i < 10; i++) { cout << v[i] << " "; } cout << endl; //關於迭代器 //end在最後一個元素的下一個位置 迭代器的種類 //任何使用迭代器的迴圈體,都不要向容器中新增元素,否則迭代器失效 //迭代器方式正向遍歷 for (vector<int>::iterator it = v.begin(); it != v.end(); it++) { cout << *it<<' ';//*t解引用 } for (auto it = v.cbegin(); it != v.cend(); it++)//const_iterator { cout << *it << ' '; } cout << endl; //迭代器方式反向遍歷 for (vector<int>::reverse_iterator rit = v.rbegin(); rit != v.rend(); rit++) { cout << *rit<<' '; } cout << endl; } void PrintVector(vector<int>&v) { for (int i = 0; i < v.size(); i++) { cout << v[i] << ' '; } cout << endl; } //插入和刪除 void insertAnddelte() { vector<int>v(10); for (int i = 0; i < 10; i++) { v[i] = randNum();//實際是拷貝,所以得提前分配記憶體 } v.erase(v.begin(), v.end() - 8);//刪除指定的區間 PrintVector(v); v.erase(v.begin());//刪除指定位置的元素 PrintVector(v); v[1] = 2; v[4] = 2; v[6] = 2; PrintVector(v); for (vector<int>::iterator it = v.begin(); it != v.end();) { if (*it == 2) { it = v.erase(it);//eraser刪除之後,將迭代器自動向後移一位 } else it++; } PrintVector(v); //頭插和尾插 v.insert(v.begin(), 100); v.insert(v.end(), 100); PrintVector(v); } void main03() { //初始化一次就行,否則每次執行時間過短導致產生一模一樣的隨機數 srand(time(0)); getElement(); InitialVector(); VectorTraverse(); insertAnddelte(); system("pause"); }