STL 容器vector的基本操作(直接上程式碼)
阿新 • • 發佈:2018-12-12
#include<iostream> #include<vector> #include<algorithm> #include<functional> using namespace std; void STLConstructor() { vector<int> vec; //無引數 vector<int> vec1(5); vector<int> vec2(5,13); vector<int> vec3(vec2); //型別相同 ///============================ vector<int>::iterator ite1=vec2.begin(); //迭代器 vector<int>::iterator ite2=vec2.end(); vector<int> vec4(ite1,ite2); for(int i=0;i<5;i++) { cout << vec4[i] << endl; } } void STLCapacity() { vector<int> vec; cout <<"vector<int> vec "<< vec.capacity()<<endl; //空的容量是0 vec.reserve(10); //修改容量 cout <<"vec.reserve(10) "<< vec.capacity()<<endl; ///=============================================== vector<int> vec1(20); cout <<"vector<int> vec1(20) "<< vec1.capacity()<<endl; //初始是多少就是多少 vec1.push_back(1); //不同編譯器 會有不同的增加結果 vec1.push_back(1); //增加容量函式 vec1.push_back(1); cout <<"vec1.push_back() "<< vec1.capacity()<<endl <<endl; ///***************************// //重新分配容量 迭代器會失效**// //****************************// vector<int> vec2(4); vector<int> vec3; cout <<"vector<int> vec3 "<< vec3.empty() << endl; cout <<"vector<int> vec2(4) "<< vec2.empty() << endl; //empty函式判斷容器是否為空 //空返回1 非空返回0 cout <<"vector<int> vec2(4) "<< vec2.size() << endl; vec2.resize(10); //resize修改容量 size返回有效空間個數 cout <<"vec2.resize(); " << vec2.size() << endl; } void fun(int i) { cout << "for_each()輸出\t" << i << endl; } void STLDO() { vector<int> vec; vector<int>::iterator ite=vec.begin(); // for(ite;ite!=vec.end();ite++) // { // cout << *ite <<endl; // } //迭代器輸出 // // for_each(vec.begin(),vec.end(),fun); // //要新增標頭檔案 #include<algorithm> for(int i=0;i<10;i++) { vec.push_back(i); //尾增加元素 } for(int i=0;i<10;i++) { //下標運算 cout << vec.at(i) << "\t"; cout << vec[i] << endl; } cout <<"---------------------------" << endl; cout << vec.back() << endl; //輸出最後一個元素 } void STLAdd() { vector<int> vec; for(int i=0;i<10;i++) { vec.push_back(i); } vec.insert(vec.begin()+2,12); //把第三個位置的元素改成12 vec.insert(vec.begin()+1,5,20);//在vec.begin()+1後插入5個20 for(int i=0;i<10;i++) { cout << vec[i] << endl; } //**********************************************// //**由於是陣列,尾新增效率高,中間新增的效率低**// //**********************************************// cout <<"---------------------------" << endl; vector<int> vec1(5,1); vector<int> vec2(10); vec2.insert(vec2.begin()+3,vec1.begin(),vec1.begin()+3); //在vec2.begin()+3的位置插入容器vec1的begin到begin+3位置的元素 for(int i=0;i<10;i++) { cout << vec2[i] << endl; } } void STLDel() { vector<int> vec; for(int i=0;i<10;i++) { vec.push_back(i); } vec.pop_back(); //尾刪除 vec.erase(vec.begin()+5); //刪除指定位置元素 vec.erase(vec.begin()+2,vec.end()-3); //刪除指定一段 //全部輸出 for_each(vec.begin(),vec.end(),fun); //要新增標頭檔案 #include<algorithm> } void STLSwap() { vector<int> vec(5,2); vector<int> vec1(5,1); vec.swap(vec1);//對兩個容器進行交換 for_each(vec1.begin(),vec1.end(),fun); } void STLChongzai() { vector<int> vec(5,2); vector<int> vec1(5,1); cout << (vec > vec1) << endl; //運算子過載 > < >= <= == 滿足返回1 不滿足返回0 //比較規則:與字串一樣 先比較第一個…………你懂得 } void STLSort() { vector<int> vec; vec.push_back(5); vec.push_back(2); vec.push_back(4); vec.push_back(9); vec.push_back(3); sort(vec.begin(),vec.end()-1); //預設從小到大排序 也可以對中間一段進行排序 for_each(vec.begin(),vec.end(),fun); cout<< "-------------------------------------------\n"; sort(vec.begin(),vec.end(),greater<int>()); //加上greater<要排的型別>()可以從大到小 //注:用greater需要加標頭檔案 #include<functional> for_each(vec.begin(),vec.end(),fun); } int main(){ STLConstructor(); STLCapacity(); STLDO(); STLAdd(); STLDel(); STLSwap(); STLChongzai(); STLSort(); return 0; }