#if 1

#include <iostream>
#include <stdlib.h> using namespace std; class List
{
public: //默认构造函数集合大小为6个元素
List(); //构造函数重载,可接受参数,改变集合大小
List(int size); //析构函数释放str,
~List()
{
delete []str;
}
//打印数据
void print(int size);
//集合元素增加
void add();
//集合元素删除
void dlt();
//集合元素修改
void alter();
//查找元素
void Seek();
//运算符重载
int operator +(List &str_2);
private:
int *str; //集合
int Length; //数组集合的大小
}; //构造函数初始化(集合2)
List::List()
{
//输入数据
Length=6; //初始化
str=new int[Length]; //在堆里申请空间
cout<<endl<<"请输入集合2(每输入一个按Enter):";
cout<<endl; //读入六位数据,重复数据删除
for(int i=0;i<Length;i++)
{
cin>>str[i]; //读入六位数据
//若输入数据重合,不录入该数据
for(int j=0;j<i;j++)
{ if(str[j]==str[i])
{
i--;
cout<<"输入非法,请再次输入,此次重复的集合元素是: "<<str[j]<<endl;
break;
}
}
}
} //构造函数重载,可接受参数,改变集合大小(集合1)
List::List(int size)
{
Length=size;
str=new int[Length+100]; //在堆里申请空间
cout<<"请输入整数集合(每输入一个按Enter):";
cout<<endl; //读入六位数据,重复数据删除
for(int i=0;i<Length;i++)
{
cin>>str[i]; //读入六位数据
//若输入数据重合,不录入该数据
for(int j=0;j<i;j++)
{ if(str[j]==str[i])
{
i--;
cout<<"输入非法,请再次输入,此次重复的集合元素是: "<<str[j]<<endl;
break;
}
}
}
cout<<"集合1为:";
print(Length); } //增加数据
void List::add()
{
int flag=0,loop=1; //flag为重合标志,loop用于循环输入
int data; //插入的数据 //检测添加元素是否合法
while(loop)
{
cout<<"请输入你要增加的元素:";
cin>>data;
for(int i=0;i<Length;i++)
{
if(data==str[i])
{
flag=1; //找到集合相同数据
}
}
if(!flag)
{
str[Length]=data; //输入的数据不重合,将其添加至数组末尾
Length++; //数据增加
loop=0; //退出循环输入
print(Length); //打印
}
else //若输入重合重新输入
{
cout<<"输入非法,数据重合!"<<endl;
loop=1; //继续下一次输入
flag=0;
}
}
} //删除数据
void List::dlt()
{
int data,j=0,idx=0; //data是需要删除的数据,j是原数组下标从0开始,idx为元素存在的标志
cout<<"请输入你要删除的元素:";
cin>>data; for(int i=0;i<Length;i++)
{
if(data!=str[i]) //从第一个元素开始遍历,未找到删除数据进行数组赋值
{
str[j]=str[i];
j++;
}
if(data==str[i])
idx=1;
} if(idx)
Length--;//数组元素减一
else
cout<<"未找到该元素!!!"<<endl;
print(Length);
} //修改数据
void List::alter()
{
int temp,temp1,flag=0; //temp要修改的值,temp1为修改的数据,flag为重合标志
cout<<"请问你要修改第几个元素:";
cin>>temp;
cout<<"请输入变更值:";
cin>>temp1; for(int i=0;i<Length;i++)
{
if(str[i]==temp1)
{
cout<<"变更数据非法,集合中已有该数据!!!"<<endl;
flag=1;
break;
}
}
if(!flag)
{
str[temp-1]=temp1;
}
print(Length);
} //查询数据
void List::Seek()
{
int i,data; //data为查找的数据
int idx=0; //idx存放下标 cout<<"请输入你要查找的数据: ";
cin>>data; for(i=0;i<Length;i++)
{
if(str[i]==data)
{
idx=i+1;
break;
}
}
if(idx)
cout<<"你查找的数据在"<<idx<<"个元素"<<endl;
else
cout<<"未找到该数据!!!"<<endl; } //运算符重载
int List::operator +(List &str_2)
{
int Len_1=this->Length; //集合1的元素个数
int Len_2=str_2.Length; //集合2的元素个数
int flag=0; //元素重合标志
int *str1=this->str; //集合1
int *str2=str_2.str; //集合2 //集合合并,集合2合并至集合1中
for(int i=0;i<Len_2;i++)
{
for(int j=0;j<Len_1;j++)
{
//如果有相等元素就退出,并打上flag标记
if( str2[i]==str1[j] )
{
flag=1;
break;
}
}
//如果没有相同元素就把集合2的值放入集合1的末尾,长度加1;
if(!flag)
{
str1[Len_1]=str2[i];
Len_1++;
}
flag=0; //下一次比较开始
}
return Len_1;
} //打印数据同时排序
void List::print(int size)
{ //冒泡排序
for(int i=0;i<size;i++)
{
for(int j=0;j<size-i-1;j++)
{
if(str[j]>str[j+1])
{
int temp=str[j];
str[j]=str[j+1];
str[j+1]=temp;
}
}
}
//打印数据
cout<<'{';
for(int i=0;i<size;i++)
{
cout<<" "<<"'"<<str[i]<<"'"<<" ";
}
cout<<'}'<<endl;
} void main()
{
int size; //集合元素个数
cout<<"请输入集合1个数:";
cin>>size; List str(size); //生成集合1
str.add(); //增加元素
str.dlt(); //删除元素
str.alter(); //改变数据
str.Seek(); //查找数据 List str_2; //生成集合2
cout<<"集合2为:";
str_2.print(6); cout<<"两集合合并为:";
str.print(str+str_2); //利用运算符重载实现集合合并至集合1的str system("pause"); }
#endif
//析构器析构时由于集合合并,原先集合1申请的空间不足会报错,已申请【100+Length】

  

c++ 集合的增删改查,与两集合的合并 缺陷(空间大小不灵活)的更多相关文章

  1. java学习3创建学生属性:学号、姓名、电话 完全实现对象集合的增删改查。(控制台来做)

    首先创建一个student类其中包括get,set与构造函数 /** * */package work2; /** * @author Administrator * */public final c ...

  2. ArrayList集合的增删改查方法

    新建一个myArrayList项目 在myArrayList项目下创建一个包 包中创建一个ArrayListDemo2.java文件 ArrayListDemo2.java import java.u ...

  3. mybatis 使用接口增删改查和两表一对一关联查询

    导包 总配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ...

  4. jQuery自定义数组操作类(类似于List集合的增删改查)

    js外部文件,前提需要引入jquery类库. 封装类代码如下: (function ($) {     $.List = function () {         var _list = new A ...

  5. 详解node + mongoDb(mongoDb安装、运行,在node中连接、增删改查)

    一.序言 好久没写博客了,这次主要聊聊 node 和 mongoDb . 先说明一下技术栈  node + express + mongoose + mongoDb.这篇博客,主要讲述 mongoDb ...

  6. Redis:五种数据类型的简单增删改查

    Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...

  7. Python 集合的各种操作 数学运算 关系操作 增删改查 生成式

    # 集合是无序的 是可变的 不能重复 允许数学运算 分散存储 # 创建# collegel = {'哲学','经济学','法学','教育学'}## # {'教育学', '经济学', '法学', '哲学 ...

  8. JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查

    前言:之前博主分享过knockoutJS和BootstrapTable的一些基础用法,都是写基础应用,根本谈不上封装,仅仅是避免了html控件的取值和赋值,远远没有将MVVM的精妙展现出来.最近项目打 ...

  9. HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good(转)

    Spring+Hibernate两种方法实现增删改查 首先,定义一个Customer的bean类,设置好Customer.hbm.xml文件.再定义好一个Dao接口.准备好一个jdbc.propert ...

随机推荐

  1. spring boot2.0(一 ) 基础环境搭建

    1.基础配置 开发环境:window jdk版本:1.8(spring boot2.0最低要求1.8) 开发工具:eclipse 构建方式:maven3 2.POM配置文件 <project x ...

  2. ThinkPHP5.0源码学习之缓存Cache(一)

    一.文件 1.缓存配置文件:thinkphp\convention.php 2.缓存文件:thinkphp\library\think\Cache.php 3.驱动目录:thinkphp\librar ...

  3. nginx日志相关运维操作记录

    在分析服务器运行情况和业务数据时,nginx日志是非常可靠的数据来源,而掌握常用的nginx日志分析命令的应用技巧则有着事半功倍的作用,可以快速进行定位和统计. 1)Nginx日志的标准格式(可参考: ...

  4. leetcode71

    这道题很简单,大约是词法分析器差不多的原理.但是我觉得看了别人简洁的代码后还是很有收获的.本人的冗余代码就不好意思放上来了,以下是别人的参考代码和值得借鉴的地方: class Solution { p ...

  5. Netty客户端发送消息并同步获取结果

    客户端发送消息并同步获取结果,其实是违背Netty的设计原则的,但是有时候不得不这么做的话,那么建议进行如下的设计: 比如我们的具体用法如下: NettyRequest request = new N ...

  6. asp.netajax与jquery和bootstrap的无刷新完美实现

    20190421asp.netajax与jquery和bootstrap的无刷新完美实现 设计代码和后台代码中重要部分加粗和深色以及字号加大. 设计前台代码: <%@ Page Title=&q ...

  7. elixir东游记:实现一个简单的中文语句解析

    备份:https://zhuanlan.zhihu.com/p/46030123 代码地址:github:pyzh/gdpl-ex.poc-1 原语句是:List1为'12332234':记a为Lis ...

  8. Day5_Py模块_1

    1. time & datetime模块 ----------------------------------------------------------- >>> im ...

  9. 发现sql注入的一些技巧

    1.如果一个'导致错误,试着查看\'能否成功(因为反斜杠在MySQL中取消了单引号)2.你也可以尝试注释掉,--',看页面返回是否正常.3.如果正常的输入只是一个整数,你可以尝试减去一些量,然后查看减 ...

  10. 最大流 USTC1280

    挺有意思的一题,最小路径之后最大流 /************************************************************** 作者:陈新 邮箱:cx2pirate ...