#include <iostream> int main(void) // 從標(biāo)準(zhǔn)輸入設(shè)備讀入整數(shù), // STL中的排序算法 // 將排序結(jié)果輸出到標(biāo)準(zhǔn)輸出設(shè)備 //聲明一個(gè)名為i的雙向迭代器 //從前向后顯示vec1中的數(shù)據(jù) //從前向后顯示vec2中的數(shù)據(jù) //從前向后顯示vec3中的數(shù)據(jù) //測試賦值成員函數(shù) //測試引用類函數(shù) //測試移出和刪除 //顯示序列的狀態(tài)信息 //vector序列容器的運(yùn)算 system("pause");
return 0; } *
Vector: 它就是數(shù)組的一個(gè)泛化推廣,, 等同于數(shù)組,它擁有一段連續(xù)的內(nèi)存空間,,并且起始地址不變,, 優(yōu)點(diǎn):1)很好的支持隨機(jī)存取,即[]操作符,,查詢操作高效 缺點(diǎn):1)插入/刪除會(huì)造成內(nèi)存塊的拷貝,,效率較低,(尾部元素除外) 2)內(nèi)存空間不夠時(shí),需要重新申請一塊足夠大的內(nèi)存并進(jìn)行內(nèi)存的拷貝,,大大影響了vector的效率 */ #include <iostream> #include <vector> #include <algorithm> using namespace std; void printVector(vector<int> v1) { //使用下標(biāo)方式 //for (unsigned int i = 0; i < v1.size(); i++) //{ // cout<<"v1["<<i<<"] = "<<v1[i]<<endl; //} //使用迭代器 //vector<int>::iterator iter; //for (iter = v1.begin(); iter != v1.end(); iter++) //{ // //cout<<"v1["<<iter-v1.begin()<<"] = "<<*iter<<endl; // cout<<"v1["<<iter-v1.begin()<<"]"<<"="<<*iter<<", "; //} //cout<<endl; //使用迭代器指針 //vector<int>::iterator *pIter; //Error,迭代器指針需要分配內(nèi)存才能使用,, //或者通俗的說pIter未實(shí)現(xiàn)時(shí),,*pIter是不確定的,運(yùn)行時(shí)對其賦值必須會(huì)發(fā)生異常 vector<int>::iterator *pIter = new vector<int>::iterator; if(NULL == pIter) { return; } for(*pIter = v1.begin(); *pIter != v1.end(); (*pIter)++) //此處若寫成*pIter++是不對的,,因?yàn)?+優(yōu)化級別較高 { cout<<**pIter<<", "; } if (NULL != pIter) { delete pIter; pIter = NULL; } cout<<endl; } void reversePrintVector(vector<int> vec) { vector<int>::reverse_iterator revIter; for (revIter = vec.rbegin(); revIter != vec.rend(); revIter++) { cout<<"v["<<revIter-vec.rbegin()<<"]="<<*revIter<<", "; } cout<<endl; } int main() { //創(chuàng)建 vector<int> v1; //創(chuàng)建空的vector對象 vector<int> v2(10); //創(chuàng)建具有10個(gè)元素的vector對象 vector<double> v3(10, 9.1); //創(chuàng)建具有10個(gè)元素的vector對象,,每個(gè)元素的值為9.1 vector<double> v4(v3); //通過拷貝一個(gè)V3對象的各個(gè)元素值,創(chuàng)建一個(gè)新的vector對象 int iArray[] = {11, 13 , 19, 23, 27}; vector<int> v(iArray, iArray + 5);//通過拷貝迭代器區(qū)間[first, end)的元素值,,創(chuàng)建新的vector對象 //初始化----用push_back,,在容器的尾端插入新元素 v1.push_back(3); v1.push_back(10); v1.push_back(19); //遍歷訪問:1-下標(biāo)方式(略) //遍歷訪問之2:迭代器方式, 建議使用此方式并熟練應(yīng)用之 cout<<"printVector(v1): "<<endl; printVector(v1); //反向遍歷之迭代器方式 cout<<"reversePrintVector(v1):"<<endl; reversePrintVector(v1); //插入元素:用insert(&pos, elem) cout<<"v1.insert(v1.begin() + 1, 100): "<<endl; v1.insert(v1.begin() + 1, 100); printVector(v1); //刪除元素: 尾部元素刪除用pop_back();單個(gè)元素刪除用erase(&pos),; //[first, last)區(qū)間元素刪除用erase(&first, &last); 整體刪除用clear(); cout<<"v1.erase(v1.begin() + 1): "<<endl; v1.erase(v1.begin() + 1); printVector(v1); cout<<"v1.pop_back():"<<endl; v1.pop_back(); printVector(v1); //查找函數(shù):由外部算法提供 vector<int>::iterator iter; cout<<"find(v1.begin(), v1.end(), 2) = "<<endl; iter = find(v1.begin(), v1.end(), 10); if (iter != v1.end()) cout<<"find "<<*iter<<" at index: "<<iter-v1.begin()<<endl; else cout<<"not find"<<endl; cout<<"v1.empty() = "<<v1.empty()<<endl; cout<<"其它:\nv1.empty() = "<<v1.empty()<<", v1.size() = "<<v1.size()<<", v1.max_size() =(hex)"<<hex<<v1.max_size()<<endl; cout<<"head-elem="<<dec<<v1.front()<<endl; cout<<"tail-elem="<<v1.back()<<endl; //清空 cout<<"v1.clear() "<<endl; v1.clear(); cout<<"v1.size() = "<<v1.size()<<", v1.empty()="<<v1.empty()<<endl; } /**/////////////////////////////////////運(yùn)行結(jié)果//////////////////////////////////////////////////////// printVector(v1): 3, 10, 19, reversePrintVector(v1): v[0]=19, v[1]=10, v[2]=3, v1.insert(v1.begin() + 1, 100): 3, 100, 10, 19, v1.erase(v1.begin() + 1): 3, 10, 19, v1.pop_back(): 3, 10, find(v1.begin(), v1.end(), 2) = find 10 at index: 1 v1.empty() = 0 其它: v1.empty() = 0, v1.size() = 2, v1.max_size() =(hex)3fffffff head-elem=3 tail-elem=10 v1.clear() v1.size() = 0, v1.empty()=1 |
|