将引用传递给双删除函数

Passing reference to deque delete function

本文关键字:删除 函数 引用      更新时间:2023-10-16

我接到了一个作业,我正在努力弄清楚我应该如何实现它。

我已经在下面粘贴了让我感到困惑的作业部分

  1. 编写一个 deque 类来保存整数列表,该列表在内部使用循环数组实现 数组的大小可以在构造函数中传递,也可以决定默认值。该类将维护保存列表头部和尾部索引位置的数据成员该类应具有成员函数:
    • bool isEmpty((;
    • bool isFull((;
    • 布尔插入前(整数(
    • bool removeFront(int&(
    • 布尔插入后退(整数(
    • bool removeBack(int&(

  2. 通过从前面逐个删除阵列中的所有项目来打印它们。

所以我写了我所有的函数,并让deque工作,我挣扎的事情是:

  1. "数组的大小可以在构造函数中传递"所以为了完成这一点,我在我的类中声明了一个名为 array 的指针,然后在我的构造函数中声明了 array = new int[size],这是唯一的方法吗,我很高兴它有效,但不确定是否有更好的解决方案。我在想矢量,但认为这太容易了。我也可以为大小声明一个 const 并在我的类中初始化数组,但同样很容易。

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

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

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

bool removeFront(int& );

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

一个示例用法是这样的:

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

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

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

int&参数不是像其他答案所建议的那样用于元素计数。

对第 1 部分的回答:

您的解决方案非常不错。你也可以

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

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

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

"bool removeFront(int&(">

和"bool removeBack(int&("函数真的让我感到困惑,我应该传递什么引用?

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

编辑:重新阅读帖子后,函数可能做的只是从数组的前面或后面删除"int"数量的元素。返回值应如前所述工作

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

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