小萌新蓝桥杯的入坑之路(一):关于STL

关于c++常用的STL基础功能介绍:vector,queue,stack,map,set(一些用法借用计蒜客培训,望大佬莫喷)
1、set:集合,具有自动删除与排序功能

#include
#include
#include
using namespace std;
int main()
{
	set country;//创建一个set的集合 
	country.insert("China");//插入 
	country.insert("America");
	country.insert("France");
	set::iterator it;//通过迭代器器对set集合里的元素进行操作 
	for(it=country.begin();it!=country.end();it++){
		cout<<*it<<" ";
	}
	cout<

(2)用set实现集合的交并差对称差(引用别人的方法)

#include 
#include 
#include 
using namespace std;
 
int main()
{
       int a[] = { 0, 1, 2, 3, 4, 5, 6, 7, 8 };
       set S( a, a + 9 );
      
       int b[] = { 3, 6, 8, 9 };
       set S2( b, b + 4 );
      
       set::iterator site;
 
       set Su;
       set Si;
       set Sd;
       set Ssd;
      
       //交集
       set_intersection( S.begin(), S.end(),S2.begin(), S2.end(),inserter( Si, Si.begin() ) );
                                  
       //并集
       set_union( S.begin(), S.end(),S2.begin(), S2.end(),inserter( Su, Su.begin() ) );
                       
       //差集
       set_difference( S.begin(), S.end(),S2.begin(), S2.end(),inserter( Sd, Sd.begin() ) );
      
       //对称差集
       set_symmetric_difference( S.begin(), S.end(),S2.begin(), S2.end(),inserter( Ssd, Ssd.begin() ) );
                                                
      
       site = Si.begin();
       cout<<"the intersection of S and S2 is : ";
       while( site != Si.end() )
       {
              cout<< *site <<" ";
              ++ site;
       }
       cout<

2、map(类似于hash表),其实我理解就是一种逻辑关系

#include
#include
#include
using namespace std;
int main()
{
	mapdict;//定义一个dict的map 
	dict["Tom"]=1;
	dict["Jone"]=2;
	dict["Mary"]=3;
	if(dict.count("Mary")){
		cout<<"Marry is in class "<::iterator it =dict.begin();it!=dict.end();it++){
		cout<first<<"is in class"<second<

3、vector动态数组很方便
(1)基础操作:(一维)

#include
#include
using namespace std;
int main()
{
	vector v;
	for(int i=1;i<=10;i++){
		v.push_back(i*i);
	}
	for(int i=0;i

(2)二位vector的动态数组

#include
#include
#include
using namespace std;
int main()
{
	int n=5; 
	vector >vec2;
	for(int i=0;i x(i+1,1);
		vec2.push_back(x); 
	}
	for(int i=0;i

输出结果类似于杨辉三角

4、Stack(栈):后进先出
(1)手动实现一个基础的栈

#include
using namespace std;
struct Stack{
	int data[10000];
	int top=-1;
	void push(int x){
		top++;
		if(top<10000){
			data[top]=x;
		}else{
			top--;
			cout<<"stack overflow"<=0){
			top--;
		}
	}
	int topval(){
		if(top>=0){
			return data[top];
		}
	}
};
int main()
{
	Stack s;
	for(int i=1;i<=10;i++){
		s.push(i);
	}
	for(int i=1;i<=10;i++){
		cout<

(2)用栈来解决汉诺塔问题

#include
#include
using namespace std;
stack S[3];
void move(int x,int y){
	int temp=S[x].top();
	S[x].pop();
	S[y].push(temp);
	cout<"<>n;
	for(int i=n;i>=1;i--){
		S[0].push(i);
	}
	hanoi(0,1,2,n);
	while(!S[2].empty()){
		cout<

5、队列queue:先进先出,对于广度优先搜索很有帮助
(1)基础用法

#include
#include
using namespace std;
int main()
{
	queue q;
	q.push(1);
	q.push(2);
	q.push(3);
	while(!q.empty()){
		cout<

(2)实现莫比乌斯环

#include
#include
using namespace std;
int main()
{
	int n,m;


	cin>>n>>m; 
	queueq;
	for(int i=1;i<=n;i++){
		q.push(i);
	}
	int cur=1;
	while(q.size()>1){
		int x=q.front();
		q.pop();
		if(cur==m){
		cur=1; 
	}else{
			q.push(x);
			cur++;
	}
	} 
	cout<

你可能感兴趣的:(蓝桥杯的准备)