-1

我正在处理 C++ 硬件分配,所以我会尽量不发布太多代码,我们正在处理的内容如下:我们有一个包含公共交换函数的类(以及插入和删除函数等)和一个私有结构数组来存储数据。

就像是:

Class set
public:
set(int dimension);
insert();
delete();
swap(set& swapset);
private:
struct *set;

现在我们主要设置了 s1 和 s2,当我像这样运行交换时:s1.swap(s2); s1 和 s2 将交换整个数组,我们需要在交换 s1 为 [5] 和 s2 后保持每个数组的维数(因此,如果 s1 设置=new set[3] 并且 s2 设置=new set[5])是 [3]

当数组是固定维度时,我能够使用插入和删除函数来交换数组,但是我不知道如何在交换函数期间更改数组的维度,因为 *set 是私有的,对吗?

提前感谢所有帮助!

编辑:我添加了部分代码,因为我无法正确解释:

  set::set()
    :counter(0),m_size(0),flag(0)
    {
    m_set=new set[DEFAULT_MAX_ITEMS];
    swapper=new set[DEFAULT_MAX_ITEMS];
    maxsize=DEFAULT_MAX_ITEMS;
    }
    set::set(int x)
    :counter(0),m_size(0),flag(0)
    {
    m_set=new set[x];
    swapper=new set[x];
    maxsize=x;
    }

void set::swap(set& other)
        {

    // Exchange the contents of this set with the other one.
        int tempmaxsize=maxsize;
        int tempcounter=counter;
        int tempmsize=m_size;

        swapper=m_set;
        m_set=other.m_set;

        other.m_set=swapper;

        m_size=other.m_size;
        counter=other.counter;
        maxsize=other.maxsize;

        other.counter=tempcounter;
        other.m_size=tempmsize;
        other.maxsize=tempmaxsize;
        }

private:

    struct set
        {
        ItemType entry;
        int count;
        };
    int maxsize;
    set* m_set;
    int m_size;
    int counter;
    int flag;
    set* swapper;

错误代码是这样的:调试断言失败!表达式:_block_type_is_valid(phead->nblockuse)

4

1 回答 1

0

实际上更改数组大小应该是swap函数的一部分,因此应该在类方法中完成。由于它是一个类方法,它可以访问私有成员。

于 2013-01-22T07:07:29.760 回答