c++ stl容器相关操作
2017-07-21 21:49
393 查看
#include<array> #include<deque> #include<vector> #include<list> #include<forward_list> #include<set> #include<map> #include<unordered_set> #include<algorithm> #include<functional> #include<numeric> #include<iostream> #include<string> #include<iterator> using namespace std; template<class Container> void PRINT_ELE(const Container& t){ for(auto a:t) cout<<a<<" "; cout<<endl; } void printList(const list<int>& list1,const list<int>& list2){ cout<<"list1: "; copy(list1.begin(),list1.end(),ostream_iterator<int>(cout," ")); cout<<endl<<"list2: "; copy(list2.begin(),list2.end(),ostream_iterator<int>(cout," ")); cout<<endl; } void printList(const string& s,const forward_list<int>& list1,const forward_list<int>& list2){ cout<<s<<endl; cout<<"list1: "; copy(list1.begin(),list1.end(),ostream_iterator<int>(cout," ")); cout<<endl<<"list2: "; copy(list2.begin(),list2.end(),ostream_iterator<int>(cout," ")); cout<<endl; } int main(){ //array /* array<int,10>a={11,22,33,44}; PRINT_ELE(a); a.back()=999; a[a.size()-1]=42; PRINT_ELE(a); cout<<"sum: " <<accumulate(a.begin(),a.end(),0) <<endl; transform(a.begin(),a.end(),a.begin(),negate<int>()); PRINT_ELE(a); //vector vector<string>sentence; sentence.reserve(5); sentence.push_back("hello,"); sentence.insert(sentence.end(),{"how","are","you","?"}); copy(sentence.begin(),sentence.end(),ostream_iterator<string>(cout," ")); cout<<endl; swap(sentence[1],sentence[3]); sentence.insert(find(sentence.begin(),sentence.end(),"?"),"always"); sentence.back()="!"; copy(sentence.begin(),sentence.end(),ostream_iterator<string>(cout," ")); cout<<endl; //deque deque<string>coll; coll.assign(3,"string"); coll.push_back("last str"); coll.push_front("first str"); copy(coll.begin(),coll.end(),ostream_iterator<string>(cout," ")); cout<<endl; coll.pop_back(); coll.pop_front(); //list list<int>list1,list2; for(int i=0;i<6;++i){ list1.push_back(i); list2.push_front(i); } printList(list1,list2); list2.splice(find(list2.begin(),list2.end(),3),list1); printList(list1,list2); list2.splice(list2.end(),list2,list2.begin()); printList(list1,list2); list2.sort(); list1=list2; list2.unique(); printList(list1,list2); list1.merge(list2); printList(list1,list2); //forward_list forward_list<int> list1{1,2,3,4}; forward_list<int>list2={77,88,99}; printList("initial: ",list1,list2); list2.insert_after(list2.before_begin(),99); list2.push_front(10); list2.insert_after(list2.before_begin(),{10,11,12,13}); printList("6 new ele: ",list1,list2); list1.insert_after(list1.before_begin(),list2.begin(),list2.end()); printList("list2 into list1: ",list1,list2); list2.erase_after(list2.begin()); list2.erase_after(find(list2.begin(),list2.end(),99),list2.end()); printList("delete 2nd and after 99: ",list1,list2); list1.sort(); list2=list1; list2.unique(); printList("sorted and unique: ",list1,list2); list1.merge(list2); printList("merge: ",list1,list2); //set,multiset set<int,greater<int>>coll; coll.insert({4,3,5,1,6,2}); coll.insert(5); for(auto i:coll) cout<<i<<" "; cout<<endl; auto status=coll.insert(4); if(status.second){ cout<<"4 insert as ele "<<distance(coll.begin(),status.first)+1<<endl; } else cout<<"4 already exists"<<endl; set<int>coll2(coll.begin(),coll.end()); copy(coll2.begin(),coll2.end(),ostream_iterator<int>(cout," ")); cout<<endl; coll2.erase(coll2.begin(),coll2.find(3)); int num; num=coll2.erase(5); cout<<num<<" ele(s) remove"<<endl; copy(coll2.begin(),coll2.end(),ostream_iterator<int>(cout," ")); cout<<endl; //map map<string,double>coll={{"tim",9.9},{"struppi",11.77}}; for_each(coll.begin(),coll.end(),[](pair<const string,double>& elem){ elem.second*=elem.second; }); for_each(coll.begin(),coll.end(),[](pair<const string,double>& elem){ cout<<elem.first<<": "<<elem.second<<endl; }); typedef map<string,float> StringFloatMap; StringFloatMap stocks; stocks["BASF"]=369.5; stocks["VW"]=421.5; stocks["Daimler"]=819.5; stocks["BWM"]=834.5; stocks["Siemens"]=840.5; StringFloatMap::iterator pos; for(pos=stocks.begin();pos!=stocks.end();++pos) cout<<"stocks: "<<pos->first<<" price: "<<pos->second<<endl; cout<<endl; for(pos=stocks.begin();pos!=stocks.end();++pos) pos->second*=2; for(pos=stocks.begin();pos!=stocks.end();++pos) cout<<"stocks: "<<pos->first<<" price: "<<pos->second<<endl; cout<<endl; stocks["Volkswagen"]=stocks["VW"]; stocks.erase("VW"); for(pos=stocks.begin();pos!=stocks.end();++pos) cout<<"stocks: "<<pos->first<<" price: "<<pos->second<<endl; */ //unordered unordered_set<int>coll{1,2,3,5,7,11,13,17,19,77}; PRINT_ELE(coll); coll.insert({-7,17,33,-11,17,19,1,13}); PRINT_ELE(coll); coll.erase(33); coll.insert(accumulate(coll.begin(),coll.end(),0)); PRINT_ELE(coll); if(coll.find(19)!=coll.end()) cout<<"19 is available"<<endl; unordered_set<int>::iterator pos; for(pos=coll.begin();pos!=coll.end();){ if(*pos<0) pos=coll.erase(pos); else ++pos; } PRINT_ELE(coll); return 0; }
相关文章推荐
- C++ STL中Map的相关排序操作:按Key排序和按Value排序
- [C++再学习系列] STL容器删除操作总结
- C++:STL容器中,string操作
- C++ STL 容器部分有关list 链表容器的基本操作
- 【C++ STL学习之一】容器的共通能力和共通操作总结
- C++ 有关STL中容器vector的操作 初始化 遍历 删除
- C++ STL相关容器详解
- [C++再学习系列] STL容器删除操作总结
- 【C++ STL学习之一】容器的共通能力和共通操作总结
- C++STL选择合适的容器以及容器操作的时间复杂度
- c++ STL 常用容器元素类型相关限制 指针 引用
- C++STL容器的基本操作
- [C++再学习系列] STL容器删除操作总结
- C++ STL学习之一:容器的共通能力和共通操作总结
- C++ STL相关容器详解
- [C++再学习系列] STL容器删除操作总结
- C++ STL相关知识及容器使用要点
- C++ STL之list容器的基本操作
- 【C++ STL学习之一】容器的共通能力和共通操作总结
- C++ STL之vector容器的基本操作