c++ 集合的增删改查,与两集合的合并 缺陷(空间大小不灵活)
#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++ 集合的增删改查,与两集合的合并 缺陷(空间大小不灵活)的更多相关文章
- java学习3创建学生属性:学号、姓名、电话 完全实现对象集合的增删改查。(控制台来做)
首先创建一个student类其中包括get,set与构造函数 /** * */package work2; /** * @author Administrator * */public final c ...
- ArrayList集合的增删改查方法
新建一个myArrayList项目 在myArrayList项目下创建一个包 包中创建一个ArrayListDemo2.java文件 ArrayListDemo2.java import java.u ...
- mybatis 使用接口增删改查和两表一对一关联查询
导包 总配置文件 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration ...
- jQuery自定义数组操作类(类似于List集合的增删改查)
js外部文件,前提需要引入jquery类库. 封装类代码如下: (function ($) { $.List = function () { var _list = new A ...
- 详解node + mongoDb(mongoDb安装、运行,在node中连接、增删改查)
一.序言 好久没写博客了,这次主要聊聊 node 和 mongoDb . 先说明一下技术栈 node + express + mongoose + mongoDb.这篇博客,主要讲述 mongoDb ...
- Redis:五种数据类型的简单增删改查
Redis简单增删改查例子 例一:字符串的增删改查 #增加一个key为ay_key的值 127.0.0.1:6379> set ay_key "ay" OK #查询ay_ke ...
- Python 集合的各种操作 数学运算 关系操作 增删改查 生成式
# 集合是无序的 是可变的 不能重复 允许数学运算 分散存储 # 创建# collegel = {'哲学','经济学','法学','教育学'}## # {'教育学', '经济学', '法学', '哲学 ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查
前言:之前博主分享过knockoutJS和BootstrapTable的一些基础用法,都是写基础应用,根本谈不上封装,仅仅是避免了html控件的取值和赋值,远远没有将MVVM的精妙展现出来.最近项目打 ...
- HibernateTemplate、HibernateDaoSupport两种方法实现增删改查Good(转)
Spring+Hibernate两种方法实现增删改查 首先,定义一个Customer的bean类,设置好Customer.hbm.xml文件.再定义好一个Dao接口.准备好一个jdbc.propert ...
随机推荐
- Eclipse手动添加web.xml
当创建web工程时,没有自动创建web.xml 这时候就需要手动添加web.xml 该怎么做呢 右键项目,点击java EE Tools 其中点击Genertate Deployment Descri ...
- linux-基础命令篇-01
基本命令: who:目前有谁在在线 netstat -a:网络的联机状态 ps -aux:背景运行的程序 sync:将数据同步写入硬盘中的命令 shutdown:惯用的关机命令 reboot, hal ...
- 规则引擎 - (二)XOM工程
XOM工程即一个Java项目. 新建Java类,添加属性,实现get/set方法.
- 【IDEA填坑】xml不编译
今天在maven编译Springboot项目的时候,发现src/main/resources下的配置文件编译失败(就是war包中没有放入xml配置文件导致程序启动失败),经查询资料,发现新版本的IDE ...
- mockjs在vue中的使用
mockjs在vue中的使用 安装好vue-cli后 加载模块: npm install mockjs 创建mock.js文件到src目录下的任一合适文件内新建mockjs.js,设置好拦截信息,设置 ...
- Angular7.1.4+Typescript3.1框架学习(二)
接着第一部分,这篇文章就 Angular cli进行介绍总结: 1. ng g:列出当前命令 ng g 需在angular工程文件夹下执行: C:\Users\zb\angulardemo\heroe ...
- JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串;JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
JSON.stringify()方法是将一个javascript值(对象或者数组)转换成为一个JSON字符串:JSON.parse()解析JSON字符串,构造由字符串描述的javascript值或对象
- spiflash
1.SPI Flash (即SPI Nor Flash)是Nor Flash的一种:2.NOR Flash根据数据传输的位数可以分为并行(Parallel)NOR Flash和串行(SPI)NOR F ...
- (1)vue点击图片预览(可旋转、翻转、缩放、上下切换、键盘操作)
今天做项目的时候,遇到了新需求,需要把点击图片放大的功能.学习了一下GitHub上的viewerjs插件 GitHub地址:https://github.com/fengyuanchen/viewer ...
- EasyUI 中 Combobox里的onChange和onSelect事件的区别
EasyUI 中 Combobox 选项发生改变时会触发 onChange,onSelect,onClick 3 个事件. 最近要做一个级联的 Combo 菜单,类似于选择地址时让用户填写省,市,区的 ...