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 ...
随机推荐
- oracle 12g,断电,数据库启动不了,无法登录 并且 报ora-00119和ora-00132错误
oracle 12g,断电,数据库启动不了,无法登录 前提:服务全部打开,监听也配置好了! 可以参考网站:https://jingyan.baidu.com/article/5552ef47c73ee ...
- (转)Jquery on()事件委派
今天浏览jQuery的deprecated列表,发现live()和die()在里面了,赶紧看了一下,发现从jQuery1.7开始,jQuery引入了全新的事件绑定机制,on()和off()两个函数统一 ...
- 12、类成员访问修饰符public/private/producted/readonly
1.private 类的私有成员 private 类的私有成员,只能在内部访问,在外部访问不到,无法被继承,我们可以将不需要被外部修改的定义为私有的 私有成员,只能在内部访问,在外部访问不到 priv ...
- Map、List、Set在Java中的各种遍历方法
一.Map的4种遍历 Map<String, String> map = new HashMap<String, String>(); map.put("姓名&quo ...
- 菜鸟使用MySQL存储过程and临时表,供新手参考,请高手斧正
因为公司最近的一个项目,第一次用到了MySQL(5.10版本),之前听传说MySQL很厉害的样子,因为开源而神奇,但是现在用起来, 感觉并不好啊!我知道是我水平太down,呜呜呜,请各路神仙略施小技, ...
- java 8 Lambda
警告: 初学者随笔, 请关闭此网页, 以免浪费你的时间
- python中一些传参事情
#一个参数的传参 def hello(a): print(a+'王彦军你好')hello('hello')''' #2个参数的 def ab(a,b): print(a+'你好') ...
- java web中验证码生成的demo
首先创建一个CaptailCode类 package com.xiaoqiang.code; import java.awt.*; import java.awt.font.FontRenderCon ...
- HTML5-2
1 html5新增表单元素 <form> <!-- 数字 还有箭头,可以加减数字 并且可以设置最大最小值 --> <input type="number&quo ...
- HDU1237
/************************************************************** 作者:陈新 邮箱:cx2pirate@gmail.com 用途:hdu1 ...