传递对deque删除功能的引用

时间:2014-12-06 19:33:20

标签: c++ deque circular-buffer

我得到了一项任务,我正在努力弄清楚我应该如何实现它。

我已经粘贴了让我困惑的作业部分

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

  2. 通过从前面一次删除一个项目来打印数组中的所有项目。

  3. 所以我写完了所有的功能,让deque工作,我努力的事情是:

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

    2. bool removeFront(int&)bool removeBack(int&)函数让我很困惑,我应该传递什么参考?返回类型也是bool,但后来在赋值中我被要求“通过从前面一次删除一个来打印数组中的所有项目”我怎么能用返回类型的bool来做,而不是int

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

2 个答案:

答案 0 :(得分:1)

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

bool removeFront(int& );

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

示例用法如下:

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

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

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

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

回答第1部分:

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

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

答案 1 :(得分:0)

  

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

中传递

除非另有说明,否则请使用矢量。使用旧式阵列只是在寻找麻烦。

  

" bool removeFront(int&)"和" bool removeBack(int&)"函数让我很困惑,我应该传递什么参考?

这是个人偏好的问题,但传入单个int作为参考可能是相当不必要的,函数所做的事情(如果我理解你的问题正确)是删除数组中的元素。你作为参数传递的int的位置。如果正确删除了所述元素,则可能需要返回true值,否则返回false值。

编辑:在阅读帖子后,功能可能只是删除了' int'数组前面或后面的元素数量。返回值应如前所述

  

但是在作业的后期,我要求"打印阵列中的所有项目,一次从前面删除一个项目"我怎么能用返回类型的bool来做这个,而不是int?

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