#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. 多个vlan之间路由

    通过这节课,我们学习到了如何利用两个交换机,创建多个vlan口,将多台Pc之间互通今天学习到了新的指令:interface vlan-interfacee ?                     ...

  2. Angular Js 与bootstrap, angular 与 vue.js

    今天突然接到电话, 问我他们的区别  虽然平时看了,但是没记住,凉凉是肯定的 总结一下: bootstrap不算是javascript框架,它只是一个前端的ui框架,然后有一些附带的js插件而已.an ...

  3. ashx导出dataTable为Excel

    一,datatable导出Excel,用户可以选择路径,方法如下: /// <summary> /// DataTable导出到Excel /// </summary> /// ...

  4. .net压缩文件夹

    1,引用:using System.IO.Packaging; 2,压缩文件的方法: /// <summary> /// 压缩文件夹到制定的路径 /// </summary> ...

  5. gensim LDA模型提取每篇文档所属主题(概率最大主题所在)

    gensim的LDA算法中很容易提取到每篇文章的主题分布矩阵,但是一般地还需要进一步获取每篇文章归属到哪个主题概率最大的数据,这个在检索gensim文档和网络有关文章后,发现竟然没有. 简单写了一下. ...

  6. 牛客网暑期ACM多校训练营(第七场)Bit Compression

    链接:https://www.nowcoder.com/acm/contest/145/C 来源:牛客网 题目描述 A binary string s of length N = 2n is give ...

  7. Python之AJAX

    AJAX <script> $("#i4").on("click", function () { var i1 = $("#i1" ...

  8. Java IO编程全解(四)——NIO编程

    转载请注明出处:http://www.cnblogs.com/Joanna-Yan/p/7793964.html 前面讲到:Java IO编程全解(三)——伪异步IO编程 NIO,即New I/O,这 ...

  9. oracle如何创建存储过程和调用

    oracle存储过程的创建语法 create or replace procedure 存储过程名称 ( --定义输入.输出参数-- 参数名1 in 参数类型, 参数名2 in 参数类型, 参数名3 ...

  10. Python 安装包报错

    以管理员身份运行cmd (requests为为所安装的包名) >>pip install reuqestsCollecting reuqests Could not find a vers ...