21天学通C++之集合的链表实现及其运算实现

本文探讨了C++中链表实现集合时的析构函数重要性,详细解析了浅层复制和深层复制的区别。在链表结构的集合类中,由于动态内存分配,需要自定义深拷贝构造函数以确保对象复制时不共用内存。同时介绍了如何在集合运算中采用普通函数的方式进行操作。
摘要由CSDN通过智能技术生成

C++的复制构造


由于C++中链表节点是由程序员动态分配空间及释放的,所以链表实现集合时就需要析构函数来对不需要使用的对象进行空间的释放。当进行对象与对象间的复制时有两种情况,分别是浅层复制和深层复制。
浅层复制可以用类自带的拷贝构造函数实现,当使用浅层复制时,编译器自带的拷贝构造函数只是将目标对象的地址传给当前对象,所以两个对象指向的是同一个内存地址。当一个对象对数据进行操作时同时也意味着改变了另一个对象的域。
深层复制需要用户自定义拷贝构造函数。在本例中,由于链表结构在对象生命周期结束后会被析构函数释放,所以如要进行对象复制,则需要为当前对象的域动态分配空间,然后将目标对象对应的值赋值给当前对象相应的变量。


下例是作业中需要实现的一个集合类,用链表实现,集合运算采用普通函数的方式。

//
//  main.cpp
//  CppCP4_2
//
//  Created by Chenjun Xiong on 2017/3/30.
//  Copyright © 2017年 Chenjun Xiong. All rights reserved.
//
//集合运算(链表实现)
//
//题目描述
//请设计实现集合类,元素类型为整形, 集合采用带头结点单链表表示。该集合类支持集合元素增加、删除、查询;并支持集合并、交、差运算(作为类成员函数);利用你设计的集合类,实现本题要求。程序应体现面向对象程序设计思想,结构合理。为保证结果唯一,集合元素递增排列。如需用到拷贝构造和赋值应重载. 空间应正确释放.。要求并、交、差运算结果先保存在集合对象内,再利用集合显示功能显示。
//
//输入描述
//开始为两个正整数m,n;后续m个整数构成集合A,再后续n个整数构成集合B
//
//输出描述
//集合A、B和他们的并、交、差集;每个集合元素间以,分隔;不同集合显示在不同行
//
//输入样例
//3 5
//1 2 3
//3 5 8 2 1
//
//输出样例
//{1,2,3}
//{1,2,3,5,8}
//{1,2,3,5,8}
//{1,2,3}
//{}

#include <iostream>
using namespace std;

typedef struct Vnode{
    int data;
    Vnode* next;
}*Node;

class Vector{
private:
    Node head;
    int size;

public:
    Vector();
    Vector(const Vector &rpt);//复制构造函数
    void Insert(int ele);
    void Delete(int ele);
    int GetElement(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值