C++,求两个c语言求集合的并集集,要用动态分配内存

【求助】数据结构中,线性表求两个集合的并集
[问题点数:40分]
本版专家分:0
结帖率 50%
CSDN今日推荐
本版专家分:8239
本版专家分:370402
2017年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本版专家分:7911
2015年6月 C/C++大版内专家分月排行榜第二2015年5月 C/C++大版内专家分月排行榜第二
2015年4月 C/C++大版内专家分月排行榜第三
本版专家分:370402
2017年 总版技术专家分年内排行榜第一
2014年 总版技术专家分年内排行榜第二
2013年 总版技术专家分年内排行榜第三
2012年 总版技术专家分年内排行榜第七
本版专家分:7911
2015年6月 C/C++大版内专家分月排行榜第二2015年5月 C/C++大版内专家分月排行榜第二
2015年4月 C/C++大版内专家分月排行榜第三
匿名用户不能发表回复!
其他相关推荐C++,问题重载+号使两个数组相加时为他们的并集,下面的代码错在哪里了?球改正!_百度知道
C++,问题重载+号使两个数组相加时为他们的并集,下面的代码错在哪里了?球改正!
#include&iostream&classAdd{int*a;public:Add(constAdd&B){size=B.a=newint[size];}intSIZE(){}Add(intsize=0,intinit=0){this-&size=si...
#include&iostream&class Add{ int*a; public: Add(const Add&B) {
a=new int[size]; } int SIZE(){} Add(int size=0,int init=0) {
this-&size=
a=new int[size];
for(int i=0;i&this-&i++)
} } Add() {
size=0; } ~Add() {
delete[]a; } void SetValue(int i=0,int value=0) {
a[i]= } Add operator+(const Add&obj); void Show();};Add Add::operator +(const Add&obj){ if(obj.a) {
C.size=size+obj.
C.a=new int [C.size];
for(int i=0;i&i++)
C.a[i]=a[i];
for(int j=0;j&obj.j++)
C.a[i+j]=obj.a[j];
return C; }}void Add::Show(){ for(int i=0;i&i++) {
cout&&a[i]&&& &; } cout&&}int main(){ Add A(5,0),B(5,3); for(int i=0;i&A.SIZE();i++) {
A.SetValue(i,a); } for(i=0;i&B.SIZE();i++) {
B.SetValue(i,b); } Add C; C=A+B; C.Show();}
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
采纳数:356
获赞数:1056
这样?:#include&iostream&using&namespace&class&Add{ int*a; int&public: Add(const&Add&B) {
if&(&B&!=&this)
a&=&new&int[size];//需要赋值吧
for&(int&index&=&0;&index&&&&++index)
a[index]&=&B.a[index];
} } Add&operator=(const&Add&B)//重载赋值操作符 {
if&(&B&!=&this)
delete[]a;
a&=&new&int[size];//需要赋值吧
for&(int&index&=&0;&index&&&&++index)
a[index]&=&B.a[index];
return&* } int&SIZE(){&return&&} Add(int&size&=&0,&int&init&=&0) {
this-&size&=&
a&=&new&int[size];
if&(size&==&0)
for&(int&i&=&0;&i&&&this-&&i++)
} }//& Add()//你含两个默认参数的构造函数和这个冲突了//& {//&
a&=&NULL;//&
size&=&0;//& } ~Add() {
delete[]a; } void&SetValue(int&i&=&0,&int&value&=&0) {
a[i]&=& } Add&operator+(const&Add&obj); void&Show();};Add&Add::operator&+(const&Add&obj){ if&(obj.a) {
C.size&=&size&+&obj.
C.a&=&new&int[C.size];
int&i&=&0;//提到这。。
for&(;&i&&&&i++)
C.a[i]&=&a[i];
for&(int&j&=&0;&j&&&obj.&j++)
C.a[i&+&j]&=&obj.a[j];
return&C;//会调用拷贝构造函数 }}void&Add::Show(){ for&(int&i&=&0;&i&&&&i++) {
cout&&&&a[i]&&&&&&&; } cout&&&&}int&main(){ Add&A(5,&0),&B(5,&3); for&(int&i&=&0;&i&&&A.SIZE();&i++) {
A.SetValue(i,&a); } for&(int&i&=&0;&i&&&B.SIZE();&i++)//c++风格的for循环第一块语句定义的变量只for循环内有效 {
B.SetValue(i,&b); } Add&C; C&=&A&+&B;//这里用到赋值操作符 C.Show();}
采纳数:3019
获赞数:3286
恩,返回了一个位于堆栈上的临时对象C,实际上随着operator +函数的返回,对象C已经被销毁,这回导致起码两个问题,1,返回的对象不再有效,2,分配的内存无法释放,被泄漏。正确做法应该是:Add &Add:operator +(const Add &a)最后返回 *this
那为什么函数调用时可以返回某个值,没有问题啊?这个就不行呢?
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。  给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
  第一行为一个整数n,表示集合A中的元素个数。
  第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素。
  第三行为一个整数m,表示集合B中的元素个数。
  第四行有m个互不相同的用空格隔开的整数,表示集合B中的元素。
  集合中的所有元素均为int范围内的整数,n、m&=1000。
  第一行按从小到大的顺序输出A、B交集中的所有元素。
  第二行按从小到大的顺序输出A、B并集中的所有元素。
  第三行按从小到大的顺序输出B在A中的余集中的所有元素。
2 4 6 8 10
1 2 3 4 5 6 8 10
样例输出1 2 3 4 5 6 7
1 2 3 4#include&iostream&
#include&string&
#include&algorithm&
int main()
for(int i=0;i&n;i++)
cin&&a[i];
for(int i=0;i&m;i++)
cin&&b[i];
int bingji[n+m],jiaoji[n+m],yuji[n+m];
int x=0,y=0;
memcpy(bingji,a,sizeof(a));
for(int i=0;i&m;i++)
int count=0;
for(int j=0;j&n;j++)
if(b[i]!=a[j])
if(count==n)
bingji[n+(x++)]=b[i];
jiaoji[y++]=b[i];
for(int i=0;i&n;i++)
int count=0;
for(int j=0;j&m;j++)
if(a[i]!=b[j])
if(count==m)
yuji[z++]=a[i];
sort(bingji,bingji+n+x);
sort(jiaoji,jiaoji+y);
sort(yuji,yuji+z);
for(int i=0;i&y;i++)
cout&&jiaoji[i]&&" ";
for(int i=0;i&n+x;i++)
cout&&bingji[i]&&" ";
for(int i=0;i&z;i++)
cout&&yuji[i]&&" ";
  给出两个整数集合A、B,求出他们的交集、并集以及B在A中的余集。
  第一行为一个整数n,表示集合A中的元素个数。
  第二行有n个互不相同的用空格隔开的整数,表示集合A中的...
常用的算术生成以及集合运算的算法
#include&iostream&
#include&vector&
#include&f...
C++集合操作之集合并集:std::set_union
C++集合操作之集合并集:std::set_union
算法set_union可以用来求两个集合的并集,此处的集合可以为std::set,也可以是std::multiset,但是不可以是hash...
C++集合运算函数总结-merge、set_union、set_difference、set_symmetric_difference、set_intersection
C++集合运算函数总结
集合A,B。(可以使用数组、list、vector)
头文件:#include
前提:两个集合已经有序。
merge() //归并两个序列,元素总个数不变,只是将两个有...
C++抽象编程——STL实战(4)——计算集合的交集,并集及区别
我记得我们在集合的Set类中,只是探究了怎么去往集合里添加跟删除元素,当然我们利用了集合的性质去做到移除重复的元素(详情见我的博文C++抽象编程——STL(5)——剔除重复元素),当然我们还可以直接用...
没有更多推荐了,c++取两个map&key的并集/交集
其实经常会遇到这个问题,比如说:一个map存了今天的数据,一个map存了昨天数据,现在需要将两天数据对比/作差,等等,也就是想取两个map
key的并集/交集,怎么做呢? &很简单,参见下面的代码,利用 map 的key 是排好序的,
我咋就没想到呢:(
template &typename
Key, typename Value&
std::map&Key,std::pair&Value,Value&
merge_maps(
std::map&Key,Value& const
&std::map&Key,Value&
const & rhs )
& typedef typename
std::map&Key,Value&::const_iterator
& std::map&Key,
std::pair&Value,Value&
& for ( input_iterator it1 = lhs.begin(), it2 =
rhs.begin(),
& & it1 != end1
&& it2 != end2; )
& if ( it1-&first ==
it2-&first )
& result[it1-&first] =
std::make_pair( it1-&second,
it2-&second );
& ++it1; ++it2;
& if ( it1-&first &
it2-&first )
原文地址:
但是如果对hash 表怎么办呢?比如python里dict, dict里的key是无序的,
I guess 这是一种解决方案:&
for k in (set(dict1) | set(dict2) ): &
#do something, set(dict1) 直接取的是dict1的keys
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。头文件为include&queue&
定义方法为
priority_queue&int&
这个数据结构中的元素可按照一定条件排列有序
默认为降序
#include&stdio.h&
#include&queue&
int main()
int n,i,t;
while(scanf("%d",&n)!=EOF)
priority_queue&int&
for(i=0;i&n;i++)
scanf("%d",&t);
q.push(t);
while(!q.empty())
printf("%d ",q.top());
printf("\n");
也可以升序排列
只需将定义优先队列语句改为:priority_queue&int, vector&int&, greater&int& & q;
#include&stdio.h&
#include&queue&
int main()
int n,i,t;
while(scanf("%d",&n)!=EOF)
priority_queue&int, vector&int&, greater&int& &
for(i=0;i&n;i++)
scanf("%d",&t);
q.push(t);
while(!q.empty())
printf("%d ",q.top());
printf("\n");
也可以自定义优先级,按条件排序
struct node
friend bool operator& (node n1, node n2)
return n1.priority & n2.
};在该结构中,value为值,priority为优先级。
通过自定义operator&操作符来比较元素中的优先级。
在示例3中输出结果为:
#include&stdio.h&
#include&queue&
#include&iostream&
struct node
friend bool operator& (node n1, node n2)
return n1.priority & n2.
int main()
int len=5,i;
priority_queue&node&
node b[len];
b[0].priority = 6; b[0].value = 1;
b[1].priority = 9; b[1].value = 5;
b[2].priority = 2; b[2].value = 3;
b[3].priority = 8; b[3].value = 2;
b[4].priority = 1; b[4].value = 4;
for(i = 0; i & i++)
qn.push(b[i]);
cout&&"优先级"&&'\t'&&"值"&&
for(i = 0; i & i++)
cout&&qn.top().priority&&'\t'&&qn.top().value&&
有没有感觉用法跟sort排序有点相似?
在某些情况下,使用优先队列会更优于set
优先队列会更快
可能是因为队列为线性结构,而set是树形结构吧
个人愚见,若有错误,还请指出。
求集合的交集并集差集
在算法头文件#include&algorithm&中
就包含对两集合进行操作的函数
set_union() 并集
set_intersection() 交集
set_difference() 差集
set_symmetric_difference() 对称差
merge() 合并
集合的类型可以是数组,list,vector
前提是两个集合已经有序
可用sort对vector进行排序,例如:sort(vec.begin(),vec.end());
在这里使用vector为例,求两个集合的差集
求差集并定要先求出两集合的交集和并集
&span style="font-size:18"&#include&stdio.h&
#include&vector&
#include&algorithm&
int main()
int n,m,i,t;
vector&int& v1,v2,v_union,v_inter,v_
while(scanf("%d %d",&n,&m)!=EOF)&span style="white-space:"& &/span&//n为第一个集合元素个数,m为第二个集合元素个数
v1.clear();
v2.clear();
v_union.clear();
v_inter.clear();
v_diff.clear();
for(i=0;i&n;i++)
scanf("%d",&t);
v1.push_back(t);
sort(v1.begin(),v1.end());&span style="white-space:"& &/span&//对集合v1排序
for(i=0;i&m;i++)
scanf("%d",&t);
v2.push_back(t);
sort(v2.begin(),v2.end());&span style="white-space:"& &/span&//对集合v2排序
set_union(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v_union));&span style="white-space:pre"& &/span&//求得两集合并集
set_intersection(v1.begin(),v1.end(),v2.begin(),v2.end(),back_inserter(v_inter));//求得两集合交集
set_difference(v_union.begin(),v_union.end(),v_inter.begin(),v_inter.end(),back_inserter(v_diff));&span style="white-space:"& &/span&//求得两集合差集
vector&int&::
for(it=v_diff.begin();it!=v_diff.end();it++)&span style="white-space:"& &/span&//迭代器it指向差集
printf("%d ",*it);
printf("\n");
C++ 求两个集合的交集和并集
看紫书看到的
先学会用法吧,具体的以后看C++ Primer
set s1{1,2,3,5};
set s2{5,7,9};
用顺序表求集合的交集、并集和差集
使用顺序表时, 需要定义一个数组来存储顺序表中的所有元素和定义一个整型变量来存储顺序表的长度。假定数组用data[MaxSize]表示,长度整型变量用length表示,并采用结构体类型表示,元素类型采...
求两个集合的交集,并集
#define N 100
int a[N],b[N],c[N],d[N];
int aa[N],bb[N];
求两个集合的交集,补集,并集
#include &stdio.h&
void xd(int a[],int b[],int n,int m)
if (n==m&&jj(a,b,n,m)==n)
第三周——求集合并集
*Copyright(c)2017,烟台大学计算机与控制工程学院
*All rights reserved.
*文件名称:123.cpp
者:李英荣
*完成日期:...
昨日,朋友拿来一份有些问题的源代码,是一个集合类和几个集合操作函数(并集、交集、差集),帮忙改了一下,刚转C++不到半个月,因为只是为了算法竞赛而学C++,所以只好好学了C++偏向算法层的知识,类只是...
今天工作遇到两个集合要求出差集,百度了一下然后做了以下测试,跟大家分享一下。
目的:求出自己所需要的集合(差集,交集,并集)
以下是自己写的测试代码
class Program
#include typedef struct node{
struct node *
}L//尾插入法
其实list集合在平时开发中使用的比较多,下面我们来看看list集合的并集、交集、差集以及源码
jdk api 中并集的实现有两种方式:(1)、在原集合的末尾追加(2)、在原集合的指定位置...
《Problem A: 求集合的交并补集》
Time Limit: 1 Sec Memory Limit: 4 MB
Submit: 973 Solved: 242
[Submit][Status][...
没有更多推荐了,}

我要回帖

更多关于 求两个集合的并集 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信