【问题标题】:Passing reference to deque delete function传递对 deque 删除函数的引用
【发布时间】:2015-02-04 18:52:38
【问题描述】:

我被分配了一项任务,我正在努力弄清楚我应该如何实施它。

我已将作业中令我困惑的部分粘贴在下方

  1. 编写一个双端队列类来保存整数列表,该列表在内部使用循环数组实现。数组的大小可以在构造函数中传递,或者您可以决定默认值。该类将维护保存列表头部和尾部索引位置的数据成员 该类应具有成员函数:
    • bool isEmpty();
    • bool isFull();
    • bool insertFront(int)
    • bool removeFront(int&)
    • bool insertBack(int)
    • bool removeBack(int&)

  2. 打印数组中的所有项,从前面一次删除一项。

所以我已经编写了我所有的函数并让双端队列正常工作,我遇到的困难是:

  1. “数组的大小可以在构造函数中传递” 所以为了实现这一点,我在我的类中声明了一个名为 array 的指针,然后在我的构造函数中声明了 array = new int[size],这是做到这一点的唯一方法,我很高兴它可以工作,但不确定是否有更好的解决方案.我在考虑矢量,但认为那太容易了。我也可以为大小声明一个 const 并在我的类中初始化数组,但同样简单。

  2. bool removeFront(int&) 和 bool removeBack(int&) 函数真的让我很困惑,我应该传入什么引用?返回类型也是bool,但是在作业的后面,我被要求“通过从前面一次删除一个来打印数组中的所有项目”我如何使用bool的返回类型而不是int来做到这一点?

我已经更改了我的函数以删除引用并具有 int 的返回类型以使代码工作,但想知道如何按照分配要求的方式实现它?

【问题讨论】:

    标签: c++ deque circular-buffer


    【解决方案1】:

    根据列出的要求,函数参数的意图是明确的。原因如下:

    拍

    bool removeFront(int& );
    

    这不仅会删除缓冲区前面的元素,并将其存储在通过引用传递的参数中。但是,该函数返回一个“bool”,指示它是否能够成功删除。

    示例用法如下:

    int elem;
    while (removeFront(elem)) {
       printf("element : %d ", elem);
    }
    

    这里变量“elem”是通过引用传入的。因此,在成功执行 removeFront() 后,您将使用刚刚删除的元素的值填充 elem。

    同样的推理也适用于其他类似的方法。请返回使用原始规范中给出的参考模式参数。

    int& 参数不是其他答案所建议的元素计数。

    第 1 部分的答案:

    您的解决方案相当不错。你也可以

    std::array 用于存储元素。有一个高级技巧可以就地分配可变长度数组 - 但是,这超出了这个问题的范围。

    【讨论】:

    • 现在很有意义,我已经相应地调整了我的代码。我很高兴暂时不深入研究 std::array。
    【解决方案2】:

    "可以在构造函数中传递数组的大小"

    除非另有说明,否则请使用矢量。使用老式数组只是自找麻烦。

    “bool removeFront(int&)”和“bool removeBack(int&)”函数让我很困惑,我应该传入什么引用?

    这是个人喜好问题,但传入单个 int 作为引用可能是不必要的,函数的作用(如果我正确理解您的问题)是删除位于数组位置的元素int 你作为参数传递。如果所述元素被正确删除,您可能希望返回一个真值,否则返回一个假值。

    编辑:重新阅读帖子后,函数可能会简单地从数组的前面或后面删除“int”数量的元素。返回值应如前所述工作

    但稍后在作业中,我被要求“通过从前面一次删除一个来打印数组中的所有项目”如何使用 bool 而不是 int 的返回类型来做到这一点?

    函数的返回类型与此无关(除非您被要求递归执行)。只需执行一个循环,从数组的开头开始并输出其内容,删除相同的元素,然后跳转到下一个并重复该过程直到其元素用完。同样,这对任何 STL 容器都更安全,因为您可以使用迭代器。

    【讨论】:

    • 我相信,这个建议没有朝着正确的方向发展。它根本不应该是要从队列中删除的元素的计数。请检查答案。
    • "打印数组中的所有项,一次删除一项"
    • 我不知道你的意思,但是用原来的界面还是可以打印的。
    • 您未在原始问题中发布的内容。我建议您发布与乞讨问题相关的所有信息。
    猜你喜欢
    • 2016-03-24
    • 2018-11-04
    • 1970-01-01
    • 2017-04-03
    • 1970-01-01
    • 2017-12-17
    • 2022-11-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多