c++ STL 之 deque
阿新 • • 發佈:2018-12-14
#define VNAME(value) {cout<<(#value)<<":"<<endl;} template<class T> void print_elemnt(T &v) { for(auto i : v) cout<<i<<" "; cout<<endl; } /************************************************************************/ /* 簡介: * deque是集vector和list集合的優點,訪問速度快,首尾插入速度快,因此,操作類似 * 但是也有缺點,中間插入巨慢,因為和它的底層資料結構有關,多個塊連線起來的。 /************************************************************************/ void test_deque() { deque<int> a; deque<int> b(4); //分配4個數據,預設值為0 deque<int> c(4,5); //分配4個5 deque<int> d(c.begin(),c.begin()+3); //區間構造 deque<int> e(b); //拷貝構造 deque<int> h; a = c; /* 迭代器:begin,end,rbegin,rend及對應的const */ cout<<" size of a is :"<<a.size()<<endl; cout<<" max_size of a is :"<<a.max_size()<<endl; cout<<" first element is :"<<a.front()<<endl; cout<<" first element is :"<<a[0]<<endl; cout<<" first element is :"<<a.at(0)<<endl; cout<<" last element is :"<<a.back()<<endl; //a.resize(n,val); //a.shrink_to_fit(); //a.assign(n,val); //賦值n個val給a //a.assign(c.begin(),c.begin()+2); b.push_back(9); b.push_front(1); b.pop_back(); b.pop_front(); auto npos = c.begin(); //c.insert(npos,6); //在npos位置插入6,插入之後注意迭代器失效問題 c.insert(npos,3,6); //在npos位置插入3個6 //c.insert(npos,d.begin(),d.begin()+2); auto ipos = c.begin(); c.emplace(ipos,1,2,3); //emplace引數可變 VNAME(h); print_elemnt(h); h.emplace_front(34); h.emplace_back(65,45); print_elemnt(h); /* *emplace() 和 insert() *前者可以插入多個數據,省去多次構造臨時變數;後者插入資料的副本 */ auto jpos = a.begin(); a.erase(jpos); //刪除一個或者一段區間[,),返回指向下一個元素的迭代器,遍歷時不要弄錯了 a.swap(b); //交換資料 a.clear(); //清空資料 if(a.empty()) { cout<<"a is empty"<<endl; } VNAME(a); print_elemnt(a); VNAME(b); print_elemnt(b); VNAME(c); print_elemnt(c); VNAME(d); print_elemnt(d); VNAME(e); print_elemnt(e); cout<<endl<<endl; }