您的位置:首页 > 编程语言 > C语言/C++

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: