zoukankan      html  css  js  c++  java
  • 函数模板-集合模拟

    我们可以用一个数组来模拟集合,add运算用以实现集合元素的增加,delete运算用于实现集合元素的删除,find运算用以实现集合元素的查找,但是目前集合元素类型未知,可以是int、char、double等基本数据类型,也可以是String、Time、Student等对象类型,要求采用模板函数实现集合元素的增加、删除和查找功能。

    三个模板函数如下:

    int addSet(T * myset, T elem,int len)

    int deleSet(T * myset, T elem, int len)

    int findElem(T * myset, T elem, int len)

    其中,addSet向集合中添加一个元素,deleSet从集合中删除一个元素,findElem判断elem是否是集合成员,三个函数分别返回元素插入位置,删除位置和存在位置。

    主函数有如下数据成员 :

    int intSet[100]

    double douSet[100]

    String StrSet[100] 分别是int类型、double类型、String的数组集合。

    int intLen, douLen, strLen分别是int类型、double类型、String的数组集合的长度

    完成上述函数模板和主函数,主函数根据输入的信息,建立初始的空集合,调用三个模板函数分别对intSet、douSet和StrSet执行相应的操作,并输出对应的集合信息。

    输入格式:

    每一行为一个集合操作,每行的第一个数字为集合元素类型,1为整型元素,2为浮点型元素,3为String类型,第二个数字为集合操作类型,1为插入,2为删除,3为查找,第三个为集合元素,集合元素类型视第一个数字给定的集合元素类型而定。输入0时标志输入结束。

    输出格式:

    输出当前操作的执行位置(插入位置、删除位置和存在位置)

    删除操作时,如果元素X不存在,输出“X is not exist!”。

    插入操作时,如果集合已满,输出“Full Set.”若元素已存在,输出“X is already exist!”

    查找操作时,如果找不到元素,输出“X is not exist!”。

    输入:

    1 1 1

    1 1 2

    1 3 1

    1 2 1

    1 2 3

    1 3 1

    2 1 1.1

    2 1 2.2

    2 1 3.3

    2 3 1.1

    2 2 2.2

    2 2 2.2

    3 1 abc

    3 1 bcd

    3 3 abc

    3 2 abc

    3 3 abc

    0

    输出:

    0

    1

    0

    0

    3 is not exist!

    1 is not exist!

    0

    1

    2

    0

    1

    2.2 is not exist!

    0

    1

    0

    0

    abc is not exist!

    遇到的问题主要是template<typename T>一开始忘记这句话每次用模板前都要写一遍,调了好久。。

    #include<bits/stdc++.h>
    using namespace std;
    
    template<typename T>//写一遍
    int Add(T arr[],T elem,int len)
    {
    	bool flag=true;
    	int pos;
    	for(int i=0;i<len;i++){
    		pos=i;
    		if(arr[i]==elem){
    			cout<<elem<<" is already exist!"<<endl;
    			flag=false;
    			break;
    		}		
    	}
    	if(pos==100)cout<<"Full Set."<<endl;
    	else if(flag==true){
    		len++;
    		arr[len-1]=elem;
    		cout<<len-1<<endl;
    	}
    	return len;//更新长度 
    }
    template<typename T>//写一遍
    int Delete(T arr[],T elem,int len)
    {
    	bool flag=false;
    	int pos;
    	for(int i=0;i<len;i++){
    		pos=i;
    		if(arr[i]==elem){
    			flag=true;
    			cout<<pos<<endl;
    			break;
    		}
    	}
    	if(flag){
    		len--;
    		for(int i=pos;i<len;i++){
    			arr[i]=arr[i+1];
    		}
    	}
    	else cout<<elem<<" is not exist!"<<endl;
    	return len;//更新长度 
    }
    template<typename T>//写一遍
    int Find(T arr[],T elem,int len)
    {
    	bool flag=false;
    	int pos;
    	for(int i=0;i<len;i++){
    		pos=i;
    		if(arr[i]==elem){
    			flag=true;
    			cout<<pos<<endl;
    			break;
    		}
    	}
    	if(flag==false)cout<<elem<<" is not exist!"<<endl;
    	return len;//更新长度 
    }
    
    int intSet[100];
    double douSet[100];
    string StrSet[100];
    int intLen,douLen,strLen;
    
    //写在solve里比较清晰 
    void solve(int type)
    {
    	int op;
    	int iint;
    	double dou;
    	string str;
    	
    	if(type==1){//int
    		cin>>op>>iint;
    		if(op==1)intLen=Add(intSet,iint,intLen);
    		if(op==2)intLen=Delete(intSet,iint,intLen);
    		if(op==3)intLen=Find(intSet,iint,intLen);
    	}
    	else if(type==2){//double
    		cin>>op>>dou;
    		if(op==1)douLen=Add(douSet,dou,douLen);
    		if(op==2)douLen=Delete(douSet,dou,douLen);
    		if(op==3)douLen=Find(douSet,dou,douLen);
    	}
    	else{//string
    		cin>>op>>str;
    		if(op==1)strLen=Add(StrSet,str,strLen);
    		if(op==2)strLen=Delete(StrSet,str,strLen);
    		if(op==3)strLen=Find(StrSet,str,strLen);		
    	}
    }
    
    int main()
    {
    	while(1){
    		int tmp;
    		cin>>tmp;
    		if(tmp==0)break;
    		solve(tmp);
    	}
    	return 0;
    }
    
  • 相关阅读:
    Bootstrap--模仿官网写一个页面
    【ASP.NET基础】客户端、服务器端的数据验证 + CKEditer
    初识--Ajax & Json
    ASP.NET 状态的传递和保存
    启动项目报错org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'loadT
    Oracle数据库导不进去
    Tomcat一闪就退
    Oracle提示已连接到空闲的实例
    创建数据库表空间
    cmd命令导入.dmp文件
  • 原文地址:https://www.cnblogs.com/LiangYC1021/p/12990401.html
Copyright © 2011-2022 走看看