c++ stl容器相關操作

#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;
}

發佈了52 篇原創文章 · 獲贊 15 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章